有没有办法错开React Hooks?

时间:2019-08-21 16:36:37

标签: javascript reactjs react-hooks

我试图避免在React Hooks中使用条件语句,但是我已经达到了可能需要一些高级技巧的地步。我这里有3个相互依赖的钩子。每个挂钩都会返回一个元组[bool, object],下一个挂钩需要执行该元组。

在内部,每个钩子都是异步操作,我无权修改它们。

const [loadingA, resultA] = useHook1(); 
const [loadingB, resultB] = useHook2(resultA.prop1); // Error!
const [loadingC, resultC] = useHook3(resultB.prop2); // Error!

if (loadingA || loadingB || loadingC) {
   return <span>loading...</span>;
}


// All results are required for this component.

return <MyComponent x={resultA.x} y={resultB.y} z={resultC.z} />; 

由于useHook2useHook3要求定义参数,因此上述操作中断了。不幸的是,我不能使用这样的条件:

// this is not allowed

if (!loadingA) {
   const [loadingB, resultB] = useHook2(resultA.prop1);
}

有人对如何交错挂钩有任何提示,以便它们可以根据先前的异步挂钩的结果执行吗?

1 个答案:

答案 0 :(得分:0)

如果参数为 undefined ,请在 hook2 hook3 中返回一些默认值。如果您不能直接修改 hook2 hook3 ,则始终可以将它们包装在另一个钩子中(useHook2Wrapper,useHook3Wrapper)并执行 undefined 值验证。

const [loadingA, resultA] = useHook1(); 
const [loadingB, resultB] = useHook2(resultA && resultA.prop1);
const [loadingC, resultC] = useHook3(resultB && resultB.prop2);
const useHook2 = (someProp) => {
  if (!someProp) {
    return [false, undefined];
  }

  // rest of the hook logic
}