在我的React应用程序中,我有一个redux reducer,它会将List作为props发送到我的组件。
我将道具复制到本地状态,并显示为下拉列表。用户更改了下拉列表,因此我的本地状态发生了变化。
在单击cancel时,我正在调用redux Toastr,该触发器触发了一种使用原始props.list重置状态的方法。但是由于某些原因,props.list也发生了变化,类似于我的状态变化。据我所知,我认为传递给对方的道具不会改变,直到我再次致电动作创建者为止。
有人遇到类似的问题吗?还是我做错了什么 很抱歉没有发布代码,如果需要,我将准备一个演示。谢谢!
答案 0 :(得分:0)
您正在做的是一种反模式,因为您正在打破反应的单一真理来源规则。您不能在内部将状态保持在与您的redux状态相关联的组件中,并期望它能够顺利运行。当单独使用React
而没有Redux
时,以及尝试将道具作为状态传递时,也会出现打破单一真理来源的类似问题。在这种情况下,将有一个新的生命周期挂钩static getDerivedStateFromProps
,但即使是稀疏的建议使用此挂钩,您也可以阅读它 here。因此,如果您打算将状态重置为原始值,则可以:
static getDerivedStateFromProps
(主要保留给UI)memoize-one
之类的备忘录助手