假设我有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
    这是codeandbox https://codesandbox.io/s/pkl6vn7x6j来演示此问题。

    有没有办法像oldValues那样比较newValuescomponentDidUpdate,而不是为此情况制作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/

    10-11 14:14