Javascript 反应错误:";无法在现有状态转换期间更新“;

Javascript 反应错误:";无法在现有状态转换期间更新“;,javascript,reactjs,redux,Javascript,Reactjs,Redux,我正在尝试编写一个使用toastr组件的应用程序。但是,当我尝试在该组件中调度redux操作时,我会收到以下控制台消息: 警告:无法在现有状态转换期间更新(例如 在渲染或其他组件的构造函数中)。渲染方法 应该是纯粹的道具和状态功能;副作用 是反模式,但可以移动到组件willmount 您可以在中看到这方面的示例。特别是第23行的toastr.js组件。谢谢 问题正是错误消息所说的:您正直接在render()方法中触发一种形式的React state update: const Toasts=({

我正在尝试编写一个使用toastr组件的应用程序。但是,当我尝试在该组件中调度redux操作时,我会收到以下控制台消息:

警告:无法在现有状态转换期间更新(例如 在
渲染
或其他组件的构造函数中)。渲染方法 应该是纯粹的道具和状态功能;副作用 是反模式,但可以移动到
组件willmount


您可以在中看到这方面的示例。特别是第23行的toastr.js组件。谢谢

问题正是错误消息所说的:您正直接在
render()方法中触发一种形式的React state update:

const Toasts=({约会,重置状态,toastedapoint,Toasts})=>{
if(toasts.type){
开关(烤面包机类型){
案例“dataFetched”:
resetState();//调度此操作将创建警告。
在本例中,它将调度Redux操作,但最终会导致React
setState()
调用


不要这样做:)副作用逻辑,比如根据当前状态触发某种额外的更新,可能会发生在类似于
componentdiddupdate
的东西中。
Toasts
组件可能需要相应地从函数组件转换为类组件。

问题恰恰是什么错误消息显示:您正直接在
render()
方法中触发一种形式的React状态更新:

const Toasts=({约会,重置状态,toastedapoint,Toasts})=>{
if(toasts.type){
开关(烤面包机类型){
案例“dataFetched”:
resetState();//调度此操作将创建警告。
在本例中,它将调度Redux操作,但最终会导致React
setState()
调用


不要这样做:)副作用逻辑,比如根据当前状态触发某种额外的更新,可能会发生在
componentdiddupdate
中。
Toasts
组件可能需要相应地从函数组件转换为类组件。

完全正确。您不应该更新
.render
中的状态,因为此时组件状态被“推送”在DOM上。如果在渲染过程中,根据状态属性执行条件显示,然后修改此属性,则推送到DOM上的元素将不再有效,因此这是一条金科玉律:在渲染过程中不要更新状态。此外:☠️小心潜在的无限循环!☠️没错。您不应该更新
.render
中的状态,因为此时组件状态会被“推送”在DOM上。如果在渲染过程中,根据状态属性执行条件显示,然后修改此属性,则推送到DOM上的元素将不再有效,因此这是一条金科玉律:在渲染过程中不要更新状态。此外:☠️小心潜在的无限循环!☠️