假设我有3个输入:rate,sendAmount和receiveAmount。我把那3个输入放在useEffect diffing params上。规则是:
receiveAmount = sendAmount * rate
sendAmount = receiveAmount / rate
receiveAmount = sendAmount * rate
时计算sendAmount > 0
或在sendAmount = receiveAmount / rate
receiveAmount > 0
这是codeandbox https://codesandbox.io/s/pkl6vn7x6j来演示此问题。
有没有办法像
oldValues
那样比较newValues
和componentDidUpdate
,而不是为此情况制作3个处理程序?谢谢
这是我用
usePrevious
的最终解决方案https://codesandbox.io/s/30n01w2r06
在这种情况下,我不能使用多个
useEffect
,因为每次更改都会导致相同的网络调用。这就是为什么我也使用changeCount
来跟踪更改的原因。此changeCount
还有助于跟踪仅来自本地的更改,因此我可以防止由于服务器的更改而导致不必要的网络调用。 最佳答案
您可以编写一个自定义钩子(Hook)来为您提供previous props using useRef
function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
然后在
useEffect
中使用它const Component = (props) => {
const {receiveAmount, sendAmount } = props
const prevAmount = usePrevious({receiveAmount, sendAmount});
useEffect(() => {
if(prevAmount.receiveAmount !== receiveAmount) {
// process here
}
if(prevAmount.sendAmount !== sendAmount) {
// process here
}
}, [receiveAmount, sendAmount])
}
但是,如果您要为每个更改ID分别使用两个
useEffect
,则您想分别处理它们,则更清晰,也可能更好地理解和理解。关于reactjs - 如何在React Hooks useEffect上比较oldValues和newValues?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53446020/