Чем отличаются данные, определенные внутри состояния и внешнего состояния, которые создаются внутри конструктора? - PullRequest
2 голосов
/ 23 января 2020

Можете ли вы объяснить мне разницу в данных внутри и вне состояния, например:

constructor(){
this.data1 = "this is data 1", 
this.state = {
this.data2 = "this is data 2"}
}

Так что, если я использую данные 2 внутри componentDidMount или в функции рендеринга без какого-либо условного кода, это вызовет ошибку которые описывают React, не могут допустить бесконечное число бла-бла-бла, но если я использую data1 в componentDidMount или в функции рендеринга, это работает отлично. Так что же такое диф rnet? Должен ли я использовать data1, чтобы сделать себя более гибким?

1 Ответ

4 голосов
/ 23 января 2020
  1. Это правильный синтаксис

    constructor(){
       this.data = "this is data 1"; 
    }
    
  2. Это неправильный синтаксис

    constructor(){
      this.state = {
        this.data = "this is data 2"
      } 
    }
    
  3. Тем не менее, это допустимо

    constructor(){
       this.state = {
         data: "this is data 2"
      } 
    }
    

Так вот в чем разница.

1 действителен, но при изменении значения, такого как this.data = 'Some new value', не будет запускаться компонент рендер и если вы показываете это значение в вашем jsx / html, это не будет отражать обновленное значение, если только какое-либо другое изменение состояния не вызовет функцию рендеринга.

3 - это способ определения переменной состояния, и вы никогда не должен mutate или напрямую обновлять состояние как this.state.data = 'some value'. Вам необходимо обновить значение, например this.setState({ data: 'some new value' }), что вызовет функцию рендеринга

...