Reactjs 为什么国家在变化?

Reactjs 为什么国家在变化?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我不明白为什么以下操作中的状态会发生更改,即使没有调用dispatch()函数。即使response.errors已满,状态也会更改 PS:状态似乎在映射函数的末尾更新 export function updateHierarchies(){ return function(dispatch, getState){ let hierarchies = getState().hierarchies.hierarchies let hierarchyToEdit = getState(

我不明白为什么以下操作中的状态会发生更改,即使没有调用dispatch()函数。即使response.errors已满,状态也会更改

PS:状态似乎在映射函数的末尾更新

export function updateHierarchies(){
 return function(dispatch, getState){
   let hierarchies = getState().hierarchies.hierarchies
   let hierarchyToEdit = getState().hierarchies.hierarchyToEdit
   let hierarchiesToUpdate = hierarchies[`level_${hierarchyToEdit.level}`].hierarchies

   hierarchiesToUpdate.map(function(hierarchy, index) {
     if(hierarchy.id === hierarchyToEdit.id){
       hierarchiesToUpdate[index] = hierarchyToEdit
     }
   });

   let newHierarchies = hierarchies
   newHierarchies[`level_${hierarchyToEdit.level}`].hierarchies = hierarchiesToUpdate

   put("/admin/hierarchies.json", {hierarchy: hierarchyToEdit}).then((response) => {
     console.log(response)
     if(response.errors){
       alert(response.errors);
     } else {
       dispatch(saveHierarchy(newHierarchies));
     }
   })
  }
}

因为您正在这一行对语句进行变异:

hierarchystoupdate[index]=hierarchyToEdit

HierarchysToUpdate
是对州的内部属性的引用

通过创建具有相同值的新数组,可以防止其成为引用:

let hierarchiesToUpdate = [...hierarchies[`level_${hierarchyToEdit.level}`].hierarchies]

因为您正在这一行对语句进行变异:

hierarchystoupdate[index]=hierarchyToEdit

HierarchysToUpdate
是对州的内部属性的引用

通过创建具有相同值的新数组,可以防止其成为引用:

let hierarchiesToUpdate = [...hierarchies[`level_${hierarchyToEdit.level}`].hierarchies]

谢谢迪奥戈!我知道不应该对状态进行变异,但我认为只有在我做了层次结构[index]=hierarchyToEdit这样的事情时才会发生这种情况。我不知道“参考”和“副本”之间的区别。这很有帮助,谢谢。谢谢迪奥戈!我知道不应该对状态进行变异,但我认为只有在我做了层次结构[index]=hierarchyToEdit这样的事情时才会发生这种情况。我不知道“参考”和“副本”之间的区别。这很有帮助,谢谢。