2016-12-07 11 views
0

Я вызываю thunk из функции рендеринга компонента. Он отлично работает, если при начальной загрузке приложения компонент, вызывающий нагрузку thunk. однако, если я загрузить приложение на другой маршрут, а затем перейти на маршрут, который делает компонент, который вызывает преобразователь, я получаю следующее сообщение об ошибке:Резервное хранилище с доставкой, ведущее к ошибке setState() в React

Warning: setState(...): Cannot update during an existing state transition (such as within render or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to componentWillMount .

The стуке Изменение Redux магазин состоянии, которое не используются любой компонент в приложении и используется только в thunk через getState() для выполнения некоторой условной логики. Если я удаляю код отправки сообщения с текстом, то ошибка исчезает.

Что мне не хватает?

+0

Добавить 'компонент', в котором вы получаете это' warning' –

ответ

1

Вам нужно только иметь в виду основное правило, вы должны никогда не менять свое состояние в функции рендеринга вашего компонента. Это же правило применяется к состоянию вашего компонента, а также к состоянию хранилища redux. Предупреждение, которое вы видите на консоли, связано с действием, которое вы отправляете в рендеринг. Рефакторинг вашего кода, чтобы все рассылки и изменения состояния происходили в других методах жизненного цикла.

+0

Я отправляю некоторые данные событий аналитики на основе того, что условное div отображает в компоненте, поэтому я вызывал thunk внутри этого условного div. Как я могу реорганизовать это? создать компонент на основе класса, содержащий каждый условный div? – jasan

+1

Я не могу сказать вам это, не глядя на ваш код, но если условие, в котором зависит ваш div, опирается на реквизит, поставляемый компоненту, вы можете поместить его в компонентDidRecieveProps. –

+0

@AmoolyaSKumar, * компонентWillReceiveProps :) –