假设我有一个状态

state = {
  inner1: {
     inner2: {
        foo: var1
     }
  }
}

我想将 foo 更新为 var2

我是否应该创建 state inner1 inner2 的副本,以便shallowEqual 会看到 state inner1 inner2 已更改?

在代码中,它会是这样的
newState = _.merge({}, state, {
   inner1: {
     innner2: {
        foo: var2
     }
   }
})

(虽然我不完全确定 _.merge 是如何工作的,但有时似乎违反直觉)

因此,从概念上讲,我正在创建一个浅拷贝,直到(嵌套级别)找到我想要更改的对象。

还是只更新 inner2 更合适?
var { inner2 } = state.inner1

var newInner2 = _.merge({}, inner2, {
    foo: var2
})

state.inner2 = newInner2

最佳答案

您可以不使用 Lodash,而是使用扩展运算符。
此示例假设 inner1inner2 上的属性比您的问题中说明的属性多。如果没有,点差就完全过时了。

this.setState((prevState) => ({
  inner1: {
    ...prevState.inner1,
    inner2: {
       ...prevState.inner2,
       foo: var2,
    },
  },
}));

关于reactjs - react ,关于不改变状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43670348/

10-11 09:22