Является ли React State действительно неизменным? - PullRequest
0 голосов
/ 29 марта 2019

Я занимаюсь разработкой приложения React и наткнулся на такое поведение состояния React, в котором я не совсем уверен, правильно ли оно!?

Я инициирую свое состояние следующим образом:

componentDidMount() {
someRequest()
   .then(...) //do stuff to get the Payload of the Response
   .then(response => {
      this.setState({
         obj1: response,
         obj2: response.someArr
      })
    })
}

* 1005И у меня есть formHandler, который изменяет состояние obj2
formHandler = event => {
   ...
   this.setState({obj2: newArrState})
}

Я всегда предполагал, что состояние React является неизменным, так что obj2 содержит новую ссылку на новый объект / массив после вызова setState().

Однако, если я взгляну на this.state.obj1, я также увижу изменения, внесенные в this.state.obj1.someArr, так что this.state.obj1.someArr === this.state.obj2

Это правильное поведение?

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

React не обеспечивает неизменность вашего состояния.Фактически, вы можете (но вы абсолютно не должны ) изменять его напрямую.
Вы, разработчик, должны обеспечить неизменность ваших данных, используя структуры данных.это просто нельзя изменить (например, imuutable.js ) или иным образом.

1 голос
/ 29 марта 2019

Да, это правильное поведение. Состояние реакции должно поддерживаться так, как если бы оно было неизменным, поскольку любое измененное значение будет переопределено при следующем вызове setState.

Из документов React:

Никогда не изменяйте this.state напрямую, поскольку последующий вызов setState () может заменить сделанную вами мутацию. Относитесь к этому состоянию как к неизменному.

https://reactjs.org/docs/react-component.html#state

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...