存在因数组变化而引起的无限循环问题,但问题并不出在Redux中的数组,这个数组实际上是保持不变的。问题在于每次渲染时,您都会调用lookupTypeData函数,该函数会创建一个新的数组。您需要对该代码进行记忆化处理,以便仅当Redux中的数组发生变化时才创建新数组。例如:
const reduxArray = useSelector((state) => state.lookup.lookup);
const masterStatusOptions = useMemo(() => {
return lookupTypeData(reduxArray, 'user_status');
}, [reduxArray]);
然后你可以保持useEffect不变:
useEffect(() => {
if (masterStatusOptions?.length) {
let masterArr = masterStatusOptions.filter((item) => item.priority !== 999);
console.log(masterArr);
setStatusOptions(masterArr);
}
}, [masterStatusOptions]);
如果masterStatusOptions不在其他地方使用,你也可以选择将其移动到effect内部:
const reduxArray = useSelector((state) => state.lookup.lookup);
const [statusOptions, setStatusOptions] = useState();
useEffect(() => {
const masterStatusOptions = lookupTypeData(reduxArray, "user_status");
if (masterStatusOptions?.length) {
let masterArr = masterStatusOptions.filter((item) => item.priority !== 999);
console.log(masterArr);
setStatusOptions(masterArr);
}
}, [reduxArray]);