所以我有2个redux状态和选择器,它们工作得很好。但是我想在map()循环中调用第二个选择器(获取基于www.example.com的详细列表category.id)。我该怎么做呢?
const Dashboard = () => {
const [data, setData] = useState([]);
const categories = useSelector(viewFinalCategories);
// categories is loaded well
const createFinalData = () => {
const finalData = categories.map((category) => {
return {
title: category.label,
category: category,
data: useSelector(viewInventoriesByCategory(category.id)), // <- error hook cannot called here..
};
});
setData(finalData);
};
useEffect(() => {
createFinalData();
}, [categories]);
return (
// SectionList of RN here...
)
2条答案
按热度按时间k7fdbhmy1#
因为它违反了钩子规则,所以不能在函数内部调用
useSelector
。解决方案是在组件级别获取数据,并在函数内部进行过滤
yi0zb3m42#
useSelector
是一个钩子,它必须遵循钩子规则,其中之一是它不能在循环中使用。作为替代,你需要将所有这些逻辑从组件移到另一个选择器。在这种情况下,我将使用createSelector
fromreselect
,因为你可以将选择类别组合到新创建的selectFinalData
中:并将其用于组件: