В конструкторе объявляю state
:
data: this.shuffle(this.newMassiv(25))
В componentWillMount, componentDidMount и render вызываю console.log(this.state.data)
.
Как видно, в didmount
массив обнуляется.
state.data
нигде не изменяется.
Почему state.data
обнуляется?
Пробовал задавать значение в componentWillMount - тоже самое.
Нужно знать, когда будет вызван тот или иной метод.
constructor
- конструктор для компонента React вызывается до его монтирования. Конструктор - это правильное место для инициализации состояния (state
). Конструктор также часто используется для привязки обработчиков событий к экземпляру класса.
componentWillMount
- вызывается непосредственно перед монтированием компонента и его отрисовкой (другими словами рендером - render()
). Не рекомендуется вызвать метод setState
внутри этого метода, обычно для инициализации стэйта используют конструктор (constructor
). Данный метод считается небезопасным. Внутри него нет возможности посмотреть или обратиться к DOM элементам.
render
- обязательный метод, сам рендеринг компонента. Код данного метода должен быть чист, что означает, что он не изменяет состояние компонента. Метод должен возвращать один и тот же результат при каждом вызове и не взаимодействует напрямую с браузером.
componentDidMount
- вызывается сразу после монтирования компонента. Обычно используется для загрузки данных через запросы или место для настройки подписки на события. Если нужно что-то сделать с DOM-элементами, то лучше здесь, вызывается после отрисовки, а значит после render
. Вызов setState
в этом методе вызовет дополнительный рендеринг, но это произойдет до того, как браузер обновит экран. Это гарантирует, что даже если render()
будет вызываться дважды в этом случае, пользователь не увидит промежуточное состояние.
Последовательность вызова методов такая:
constructor
componentWillMount
render
componentDidMount
Если в constructor
присвоить в state
какое-то значение и это значение есть в методе componentWillMount
и render
, но нет в componentDidMount
, значит значение state
обновляется где-то в недрах вашего render
. Возможно вы передаете ваш state
в дочерние элементы и меняете его там - такое тоже возможно. Не видя полного кода - нельзя дать конкретный ответ. Необходимо внимательно посмотреть на код и найти место, где значение меняется. Не бывает так, что до метода componentDidMount
не пришел state
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
По какой-то причине теряется контекст вызова в этой части кода:
Как найти все теги с одинаковым атрибутом spinner и заменить им всем значение этого атрибута