2

这是我的 React 钩子代码:

function calc_c({a,b}){
  //some long calculation that is based on a,b
}
function MyComponent(params){
  var a=calc_a(params)
  var a=calc_b(params)
  var c=React.useMemo(()=>calc_c({a,b},[a,b])
}

我的问题:我如何找出哪些参数发生了[a,b]变化并导致调用calc_c

编辑:我最终使用了通用版的 skyboyer 优秀答案:

export function useChanged(name,value){
  function print_it(){
    console.log('changed',name)
  }
  React.useMemo(print_it,[value])
}
4

1 回答 1

2

这取决于您是否要求调试目的,或者您希望在代码中依赖它(例如“如果 A 被更改,则返回 B,否则返回 C”)

对于这两种情况,都没有简单的方法可以实现。但是解决方法会有所不同。

假设您只想弄清楚为什么要重新计算。然后把 bazillion

useEffect(() => {
  console.log("a is changed");
}, [a])

每个依赖项一个。是的,无聊和重复。但最简单的方法是,您实际上应该额外担心的越少。或者看看是否useWhatChaged对你有用(如果依赖列表中有十几个变量)。

另一件事,如果您想在常规中进行检查(但为什么?)(不是出于调试目的的临时代码,我的意思是)。然后你可能会使用usePrevious或编写类似的东西。

于 2021-10-22T22:13:52.057 回答