我正在以正确的方式更新州?

时间:2017-10-15 01:49:32

标签: reactjs state

我有一些state看起来像这样:

{
  formStatus: {
    isFormOK: false,
    fields: {
      field1: {
        status: 'normal',
        errorText: '',
        value: ''
      },
      field2: {
        status: 'error',
        errorText: 'must be an email',
        value: ''
      },
    }
  }
}

是的,这是父表单的state,它有一些表单字段作为其子表单。

假设我想要更新字段的属性,例如:field1.status,因为上面的state是一个嵌套对象,我将创建一个新的state以及更新的保持整个state不可变的值。

但显然,每次setState时,由于state已成为一个全新的对象,它将触发所有子组件的render()(所有字段项),所以我将所有孩子的实施从stateless component更改为React.PureComponent。它似乎处理了这个问题。

我是以正确的方式做事吗?似乎需要很多才能到达那里。

我真的需要更新整个state吗?

1 个答案:

答案 0 :(得分:0)

是的,您必须更新整个state。如果不更新整个状态并改变现有状态,则父组件将不知道状态已更改且不会重新呈现,并且不会将任何更改传递给子组件。