组件中的减速器道具发生更改

时间:2019-05-04 07:38:20

标签: reactjs react-redux

在我的React应用程序中,我有一个redux reducer,它会将List作为props发送到我的组件。
我将道具复制到本地状态,并显示为下拉列表。用户更改了下拉列表,因此我的本地状态发生了变化。 在单击cancel时,我正在调用redux Toastr,该触发器触发了一种使用原始props.list重置状态的方法。但是由于某些原因,props.list也发生了变化,类似于我的状态变化。据我所知,我认为传递给对方的道具不会改变,直到我再次致电动作创建者为止。

有人遇到类似的问题吗?还是我做错了什么 很抱歉没有发布代码,如果需要,我将准备一个演示。谢谢!

1 个答案:

答案 0 :(得分:0)

您正在做的是一种反模式,因为您正在打破反应的单一真理来源规则。您不能在内部将状态保持在与您的redux状态相关联的组件中,并期望它能够顺利运行。当单独使用React而没有Redux时,以及尝试将道具作为状态传递时,也会出现打破单一真理来源的类似问题。在这种情况下,将有一个新的生命周期挂钩static getDerivedStateFromProps,但即使是稀疏的建议使用此挂钩,您也可以阅读它 here。因此,如果您打算将状态重置为原始值,则可以:

  1. 使用static getDerivedStateFromProps(主要保留给UI)
  2. 使用钥匙道具,它将使您恢复到初始状态
  3. 使用诸如memoize-one之类的备忘录助手