Когда мы можем избежать использования конструктора для инициализации состояния?

1

В примере, приведенном на сайте reactnativeexpress здесь, вместо конструктора для инициализации переменной счетчика используется state = {count: 0}.

В официальных документах Facebook здесь говорится

В общем, вы должны инициализировать состояние в конструкторе, а затем вызвать setState, когда вы хотите его изменить.

Поэтому я создал конструктор для инициализации count таким же образом:

constructor(props) {
  super(props);
  this.state = {count: 0}
}

Кажется, что код работает одинаково (по крайней мере, на поверхности), так какая разница между созданием конструктора и инициализацией count как в примере?

  • 1
    Код на сайте не является JavaScript (пока)
  • 0
    Я не понимаю Если это ES6, не так ли? ES6 против JS Или есть что-то еще, я не получаю
Показать ещё 2 комментария
Теги:
ecmascript-6
react-native
facebook
constructor

2 ответа

1
Лучший ответ

В примере, который вы прикрепляете в качестве ссылки, они используют поля класса ES, которые являются предложением (в настоящее время на этапе 2).
Это означает, что вам понадобятся дополнительные пресеты/плагины babel (или любого другого компилятора JavaScript), чтобы поддерживать его, пока он еще не является частью официальных спецификаций ECMAScript.

В другом примере вы используете конструктор классов, который является частью ES2015.

Оба получат вам те же результаты - свойство, прикрепленное к экземпляру класса.
который в основном представляет собой синтаксический сахар для прототипа.

0

Это больше связано с классами ES6.

getFullName() {
  return this.props.firstName + this.props.lastName;
}

Вышеуказанная функция выдает ошибку, указывающую, что реквизит не определен.

getFullName = () => {
  return this.props.firstName + this.props.lastName;
}

Вышеприведенный код передает контекст this в функцию и будет работать хорошо.

Аналогичным образом, ваш

state = {count: 0}

выполняется в контексте класса [с использованием this ].

Такое же state нужно вызвать с помощью this.state внутри конструктора, чтобы связать его с соответствующим контекстом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню