В примере, приведенном на сайте reactnativeexpress здесь, вместо конструктора для инициализации переменной счетчика используется state = {count: 0}
.
В официальных документах Facebook здесь говорится
В общем, вы должны инициализировать состояние в конструкторе, а затем вызвать setState, когда вы хотите его изменить.
Поэтому я создал конструктор для инициализации count
таким же образом:
constructor(props) {
super(props);
this.state = {count: 0}
}
Кажется, что код работает одинаково (по крайней мере, на поверхности), так какая разница между созданием конструктора и инициализацией count
как в примере?
В примере, который вы прикрепляете в качестве ссылки, они используют поля класса ES, которые являются предложением (в настоящее время на этапе 2).
Это означает, что вам понадобятся дополнительные пресеты/плагины babel (или любого другого компилятора JavaScript), чтобы поддерживать его, пока он еще не является частью официальных спецификаций ECMAScript.
В другом примере вы используете конструктор классов, который является частью ES2015.
Оба получат вам те же результаты - свойство, прикрепленное к экземпляру класса.
который в основном представляет собой синтаксический сахар для прототипа.
Это больше связано с классами 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
внутри конструктора, чтобы связать его с соответствующим контекстом.