Изменение подсвойства состояния в ReactJS

Обновление состояния в ReactJS не имеет большого значения. Но кто-нибудь когда-нибудь сталкивался с обновлением подсвойства состояния в ReactJS?

Например, я хочу обновить third из first.second.third, но когда я действительно это делаю, он обновляет состояние, но отбрасывает остальные элементы в состоянии.

Я следую тому же синтаксису, который доступен в Интернете. Прилагается мой код и вывод. Я делаю что-то не так? Пожалуйста, дайте мне знать, так как это единственная блокировка при обновлении объекта анализа при изменении полей ввода.

testing(a,b){
    console.log(a)
    console.log(b)
  this.state = {...this.state.analysis,
    first: {
      second: {
        [a]: b
      }
    }
  }
  console.log(this.state.first)

Ссылка, которую я использую:

http://react-experiments.herokuapp.com/state-flow


person Knowledge Seeker    schedule 31.03.2020    source источник


Ответы (2)


Мне не ясно, что здесь third, но что касается вложенных обновлений состояния, вам обычно нужно сделать глубокую копию, а затем обновить значения в этой копии.

К сожалению, код для этого довольно многословен, поэтому мы используем помощники, такие как immutability-helper, чтобы сделать это проще. Ознакомьтесь с файлом readme по этой ссылке, в нем также есть примеры того, как выполнять глубокое копирование без использования этой библиотеки.

person Edwin Clement    schedule 31.03.2020

вы можете получить переменную состояния, сделать ее новой переменной и изменить значение состояния внутри

а затем установите новую переменную в состояние

this.state = {
    fields: {
      second: {
        third: "test"
      }
    }
}

yourFunc() {
  const fields = this.state.fields;
  fields.second.third = "test2";
  this.setState({
    fields: fields
  })
}

render() {
  console.log("this.state.fields = ", this.state.fields);
}

person Donald Wu    schedule 31.03.2020