Какие типы инициализации более подходят для конструктора и компонентаWillMount?
Если у меня есть компонент React, который требует некоторой настройки (например, для таймеров или API WebAudio и т.д.), у меня возникли проблемы с решением, должна ли инициализация идти в constructor
или componentWillMount
. Есть ли какие-либо преимущества или недостатки для одного? Мне непонятно, какой из них лучше для этого.
Я немного разобрался, чтобы узнать, обсудили ли кто-то различия между constructor
и componentWillMount
, но я ничего не смог найти.
EDIT: Redux и любые асинхронные функции не должны быть частью уравнения.
Ответы
Ответ 1
Как правило, единственное, что вы делаете в конструкторе, - назначить свой начальный this.state
, если ваш компонент является состоятельным. Вы не должны делать ничего другого в конструкторе.
componentWillMount
, как правило, не требуется. Я бы сказал, что в большинстве случаев его использование является анти-шаблоном. Одна из причин, по которой люди используют это, - это обновление состояния от внешнего источника за последний раз до рендеринга, но технически назначение его в конструкторе эквивалентно. Единственное небольшое удобство, которое он предоставляет, состоит в том, что вы можете setState
внутри него, но вы не можете внутри конструктора.
Для любых побочных эффектов (выборка данных или обработка DOM) вы должны использовать componentDidMount
.
Ответ 2
Если вы хотите вызвать какое-либо действие потока (для вызовов ajax), используйте componentWillMount или componentDidMount.
Вы можете инициализировать состояние в конструкторе