假设我有3个输入:rate,sendAmount和receiveAmount。我把那3个输入放在useEffect diffing params上。规则是:
- 如果sendAmount改变了,我计算
receiveAmount = sendAmount * rate
- 如果receiveAmount改变了,我计算
sendAmount = receiveAmount / rate
- 如果费率发生变化,我计算
receiveAmount = sendAmount * rate
时间sendAmount > 0
或计算sendAmount = receiveAmount / rate
时间receiveAmount > 0
这是codesandbox https://codesandbox.io/s/pkl6vn7x6j来演示此问题。
有没有一种方法可以比较oldValues
和newValues
喜欢,componentDidUpdate
而不是为此情况制作3个处理程序?
谢谢
这是我使用https://codesandbox.io/s/30n01w2r06的最终解决方案usePrevious
在这种情况下,我不能使用多个,useEffect
因为每次更改都会导致相同的网络呼叫。这就是为什么我也使用changeCount
跟踪更改的原因。这changeCount
也有助于跟踪仅来自本地的更改,因此我可以防止由于服务器的更改而导致不必要的网络呼叫。
由于状态不会与功能组件中的组件实例紧密耦合,因此,如果不先
useEffect
保存状态,就无法进入先前的状态useRef
。这也意味着状态更新可能在错误的位置错误地实现了,因为以前的状态在setState
updater函数中可用。这是一个很好的用例
useReducer
,提供了类似Redux的存储,并允许实现各自的模式。状态更新是显式执行的,因此无需弄清楚哪个状态属性已更新。从派遣行动中已经很清楚了。这是一个示例,看起来可能像这样: