我在我的React应用程序中使用Redux存储来存储数据,例如我的开销。
现在我在其中一个组件中使用这些开销来计算待办事项徽标计数,如下所示:
const [badgeValue, setBadgeValue] = useState(0);
const expenses = useSelector(({ expenses }: RootState) => expenses.items);
useEffect(() => {
const setBadge = async () => {
const badgeNumber = await calculateRequestBadgeNumber(expenses);
setBadgeValue(badgeNumber);
};
setBadge();
return () => setBadgeValue(0);
}, [expenses]);
这个功能按预期工作。但是,当我想要像这样过滤掉已删除的费用时,我遇到了一个奇怪的副作用:
const expenses = useSelector(({ expenses }: RootState) =>
expenses.items.filter((expense: Expense) => !expense.deleted)
);
这导致了useEffect被不断地调用。为什么会发生这种情况?