vue mutations方法如何动态修改对象内参数?

通过updateSetting()方法修改这个setting里面的任意参数,有没有什么办法让这个方法动态传参,直接用state.setting.传过来的名称,并赋值this.$store.commit('updateSetting',params);,而不用写多个方法给setting里其它参数赋值,

state:{
    setting:{
      tag: {
        top: 0,
        left: 0,
        tagId: ''
      },
      params: '',
      params1: ''
    }
}
updateSetting(state,params){
     //类似下面这种形式
    state.setting.params=params.value
}
阅读 1.3k
1 个回答

可以通过 Object.keys() 来获取所有的属性名然后遍历赋值,或者使用 ... 的展开符。

比如说

// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    setting:{
      tag: {
        top: 0,
        left: 0,
        tagId: ''
      },
      params: '',
      params1: ''
    }
  },
  mutations: {
    updateSetting(state,params){
      const keys = Object.keys(params)
      keys.forEach(key=> state.setting[key] = params[key])
    },
    // 或者
    updateSetting2(state,params){
      state.state = { ...state, ...params }
    }
  }
})

只不过这里我没有去做 state.tag.top 这样的赋值,其实你也可以通过使用 lodashmerge 方发来做合并处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题