Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象单独分配不';不要在React中触发状态变化_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 对象单独分配不';不要在React中触发状态变化

Javascript 对象单独分配不';不要在React中触发状态变化,javascript,reactjs,redux,Javascript,Reactjs,Redux,我想知道在React/Redux世界中,这两者之间的区别是什么 let newState = Object.assign({}, state); newState[action.componentDescriptor.name][action.id].Value = action.value; return newState; 还有这个 return Object.assign({}, state, { [action.componentDescriptor.name]

我想知道在React/Redux世界中,这两者之间的区别是什么

let newState = Object.assign({}, state);
newState[action.componentDescriptor.name][action.id].Value = action.value;
return newState;
还有这个

    return Object.assign({}, state, {
        [action.componentDescriptor.name]: objectAssign({}, state[action.componentDescriptor.name], {
            [action.id]: objectAssign({}, state[action.componentDescriptor.name][action.id], {
                Value: action.value
            })
        })
    });

前者似乎不会触发渲染(似乎不会被视为状态更改)。但后者被识别为状态更改并触发渲染。两者都返回新对象(状态)

在前一个对象中,您使用的是
对象。分配
一次,这只会创建一个浅拷贝。这意味着仅为一个标高复制对象,并且所有嵌套特性都指向相同的参照。因此,当您直接更改它时,Redux无法理解其区别

在后一种情况下(我认为你做得对),你改变了你的状态,而没有改变原来的状态。您正在使用
对象创建嵌套属性的副本。分配
。这就是区别所在

对于更干净的版本,您可以使用


或者你可以避免这么多嵌套突变。

请提供你的
状态
结构和
操作
结构
return {
  ...state,
  [action.componentDescriptor.name]: {
    ...state[action.componentDescriptor.name],
    [action.id]: {
      ...state[action.componentDescriptor.name][action.id],
      Value: action.value,
    }
  }
}