Я продолжаю сталкиваться с той же проблемой с React. Я чувствую, что должен использовать методы жизненного цикла. (Кроме компонентов componentWillMount и componentWillReceiveProps). Но они никогда не соответствуют моей цели. Вот 2 примера:Реакт - как использовать методы жизненного цикла
- Асинхронная загрузка
Мой родительский компонент загружает некоторые данные с помощью AJAX. Компонент внука нуждается в этих данных, который передается через реквизит. Из-за времени, когда данные могут быть доступны, когда дочерний компонент установлен или нет. Я не знаю, следует ли поместить код в компонент моего внука, который зависит от этих реквизитов в компонентеWillMount() или в компонентеWillReceiveProps(). Я в конечном итоге должен положить его в оба. (Или в методе, который они оба называют).
- Способы жизненного цикла либо вызываются при первоначальном рендере, либо нет. Я хочу, чтобы их вызывали на обоих.
Мой компонент получает некоторые данные. (Использование getStateFromFlux - mixin, предоставляемое Fluxxor). Это происходит несколько раз в течение цикла загрузки данных различными флагами, установленными на извлеченный объект данных: разгружается, загружается и загружается, скажем. Это изменение состояния вызывает повторную визуализацию.
Я только хочу отображать и показывать данные, если есть что показать. Таким образом, мой метод визуализации имеет первую строку:
if data.loadState != 'loaded'
return '<span />'
Ok. Что ж. Я подумал - должен быть метод жизненного цикла, чтобы исправить это. Итак, я сделал это:
shouldComponentUpdate: function (nextProps, nextState) {
if nextState.loadState == 'loaded'
return true
else
return false //stops the render. Good.
}
Наконец-то я подумал - я использовал метод жизненного цикла.
Но, увы, в то время как это остановить рендер называют в некоторых случаях - когда нет никаких данных - я до сих пор не могу удалить Hacky выглядящей линии о
if data.loadState != 'loaded'
return '<span />'
Это потому, что shouldComponentUpdate является не вызывается для первоначального рендера. Когда этот компонент сначала отображает, данных нет. loadState «разгружен». Метод render еще называется. И мне все же нужно избегать отображения пользовательского интерфейса (с пустыми полями данных).
В общих чертах - методы lifecyle называются только на начальном рендере или только на последующих визуализаторах. Для большинства из моих случаев использования это совершенно бесполезно. Я хочу метод, который не зависит от того, является ли он первым рендером или последующим.
Что мне не хватает в реакторе? (Единственное, о чем я могу думать, это то, что он предназначен для использования с исходной обработкой на стороне сервера, когда вы можете быть уверены в своих данных, - тогда один раз в браузере методы жизненного цикла описывают обнаружение изменений).
Благодаря