我希望有一个变量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个选择器,当我只使用一个钩子的时候。
1条答案
按热度按时间ttcibm8c1#
当然你可以这样做。你可以在
useSelector
调用中编写任何你想要的逻辑,你的代码是完全有效的。你不能在useSelector
调用周围编写if
语句,但是在它的内部,这是完全可以的。你唯一需要关心的是,改变
targetSelector
的值也需要重新呈现你的组件,否则新的选择器将永远不会被执行。所以targetSelector
也需要是某种状态,本地或全局。