reactjs 如何根据传递的函数param使用赋给单个变量的条件useSelector?

velaa5lx  于 2023-03-29  发布在  React
关注(0)|答案(1)|浏览(100)

我希望有一个变量selectorValue,但是useSelector选择器函数会根据传递的函数param而改变。
例如,我想获取实体书或电子书的选择器,所以我会传入实体书或电子书作为目标,然后它会使用实体书选择器或电子书选择器。

const myDataHook = ({ targetSelector: string }) => {
  // Doesn't work, just an example of the condtional selector
  // Example is only 2, but real case is 4+
  const selectorValue: string = useSelector(() => {
    if (targetSelector === SELECTOR_A) return getSelector_A_Values();
    else {
      return getSelector_B_Values();
    }
  });
  ...
}

我不能为不同的useSelectors做if语句,因为它们是钩子,必须在顶层调用。useEffect也不起作用,因为同样是顶层。
我不想声明N个选择器,当我只使用一个钩子的时候。

ttcibm8c

ttcibm8c1#

当然你可以这样做。你可以在useSelector调用中编写任何你想要的逻辑,你的代码是完全有效的。你不能在useSelector调用周围编写if语句,但是在它的内部,这是完全可以的。
你唯一需要关心的是,改变targetSelector的值也需要重新呈现你的组件,否则新的选择器将永远不会被执行。所以targetSelector也需要是某种状态,本地或全局。

相关问题