Reactjs 组件的替代品将为我的特定用例接收道具

Reactjs 组件的替代品将为我的特定用例接收道具,reactjs,redux,react-router,lifecycle,react-component,Reactjs,Redux,React Router,Lifecycle,React Component,由于componentWillReceiveProps将被弃用,我听到过使用componentdiddupdate的替代方法,但问题是componentdiddupdate也将在状态更改时被调用。 现在,这个问题最常见的答案是比较以前和现在的道具,并执行所需的操作 但是,无论道具是否与前一道具相同,只要道具发生变化,我都要执行某些操作 这样一个用例的示例如下 用例1: 我的页面顶部有一个搜索栏,当用户在搜索栏中键入,然后单击搜索按钮时,所有其他组件都必须执行某些操作。所以,当搜索字符串时,我通常

由于
componentWillReceiveProps
将被弃用,我听到过使用
componentdiddupdate
的替代方法,但问题是
componentdiddupdate
也将在状态更改时被调用。 现在,这个问题最常见的答案是比较以前和现在的道具,并执行所需的操作

但是,无论道具是否与前一道具相同,只要道具发生变化,我都要执行某些操作

这样一个用例的示例如下

用例1: 我的页面顶部有一个搜索栏,当用户在搜索栏中键入,然后单击搜索按钮时,所有其他组件都必须执行某些操作。所以,当搜索字符串时,我通常在redux中设置一个状态。所有其他组件将从
组件将接收到的道具
中了解这些更改。现在我不会检查
prevProps
currentProps
是否相同。每次调用
componentWillReceiveProps
时,我都会执行某些操作,因为如果用户删除搜索的字符串,重新键入相同的字符串,然后再次单击搜索按钮,则其他组件仍然需要执行这些操作,即使搜索的字符串与前一个相同。所以,比较当前和以前的道具不是我能做的

现在使用
componentdiddupdate
,如果我不进行任何检查就执行这些操作,因为它也会在状态更改时调用,那么它将无法工作

用例2: 听着路由的变化,我使用React路由器,它使用位置对象。现在,在本例中,我也将使用
componentWillReceiveProps
,来监听位置更改并相应地更新我的组件,而不管是否再次传递相同的位置对象。因此,与前面的用例相同的问题


处理此类场景的理想方法是什么?

您可以向Redux Store添加一个附加字段,该字段将传达用户新操作发生的信息,例如单击搜索按钮的时间戳,或UUID,然后在componentDidUpdate中与之进行比较。

从技术上讲,这是可行的。但是,我想知道是否有不同的方法来解决这些问题。这个解决方案似乎有点老套,即使它可以工作。这个用例看起来很常见,我想知道什么是正常的方法。我同意。看看你是否能避免比较道具的需要。您所说的哪些操作即使在同一个字符串上也需要执行?例如,在我提到的用例中,By action调用一个api,该api为搜索的字符串获取一些结果。现在,以堆栈溢出搜索本身为例。每次在搜索后按enter键时,它都会获取最新的结果。不管是否搜索相同的字符串,它都会这样做。最终我想要的是,应该有一种方法知道组件将接收新的道具,但它不应该与道具和状态更改上都会调用的componentDidUpdate耦合。我说的有道理吗?也许你应该把这样的逻辑移到注册点击的父组件上,然后从那里运行它。检查逆操作如何。检查状态是否已更改,如果道具更改,是否未运行所需的功能?还是道具也会改变状态?