【问题标题】:How to set nested state in vuex store?如何在 vuex 商店中设置嵌套状态?
【发布时间】:2018-07-25 06:41:16
【问题描述】:

我的应用程序中有一个非常复杂的状态,例如:

state: {
  formFieldList: [
    {
      name: 'RadioGroup',
      schema: {
       edit:true,
       label:"Radios",
       name:"Radios",
       type:"radios",
       values: [
         {
           labelName: 'default',
           value: 'default',
         }
         {
           labelName: 'default2',
           value: 'default',
         }
       ]
     },
     {
      name: 'RadioGroup1',
      schema: {
       edit:true,
       label:"Radios1",
       name:"Radios1",
       type:"radios1",
       values: [
         {
           labelName: 'default',
           value: 'default',
         }
         {
           labelName: 'default2',
           value: 'default',
         }
       ]
     },
   },
 ],
}

作为 Vuejs 数组更改警告,我在我的突变中使用 Vue.set。当我在一个 fieldList 项中设置 values 数组时,它将更新所有 RadioGroup 价值观。

updateOptionValue(state, { index, optionIndex, value }) {
  let values = state.formFieldList[index].schema.values;
  let labelName = values[optionIndex].labelName;
  Vue.set(values, optionIndex, {
    labelName,
    value,
  });
}

如何处理嵌套数组更新? 这是我在代码沙盒上的简单演示 https://codesandbox.io/s/w6nq81l808

当我将两个radiogroups添加到红色区域(单击radiogroup两次),并同时编辑两个radiosgroups时,值会同时改变。

【问题讨论】:

  • 我不明白为什么Vue.set(state.formFieldList[index].schema.values, optionIndex, value) 不起作用。
  • @DigitalDrifter 如果不使用Vue set,它不会检测数组的变化,vuejs.org/v2/guide/list.html#Array-Change-Detection
  • @DigitalDrifter,我在 codesanbox 上创建了一个演示,Store 中的 mutaion updateOptionLabel 不起作用。

标签: vue.js vuex


【解决方案1】:

您可以将状态属性分配给新对象以使其具有反应性:

updateOptionValue(state, { index, optionIndex, value }) {
  let values = state.formFieldList[index].schema.values;
  let labelName = values[optionIndex].labelName;
  values[optionIndex] = {
    value,
    labelName
  }
  state.formFieldList = JSON.parse(JSON.stringify(state.formFieldList)) // assign new object
}

【讨论】:

  • 我按照你说的改变了我的变异代码,它几乎可以工作。但是当我输入第一个字符时,它会更新我的 formFieldList 数组中的两个值,codesandbox.io/s/w6nq81l808
猜你喜欢
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2018-05-19
  • 2020-05-09
  • 2021-04-10
  • 2019-07-15
  • 2020-05-22
  • 2017-09-17
相关资源
最近更新 更多