useEffect监听了很多变量怎么办?
如果是简单的数据处理的话,我会用 @justjavac 答案里的做法:直接在 rendering 里处理数据。但是如果是计算密集的处理的话,我建议用 useMemo:
const { data: data1 } = //...
const parsedData1 = useMemo(
() => data1?.data ? JSON.parse(data1.data) : undefined,
[data1]);
另外,如果答主一定要维护额外的 state 的话(例如在其他地方需要改变 state),那就把你那个大的 useEffect 拆分成四个小的 useEffect 吧。
再假设你想要等四个请求都完成再 setState 的话,可以:
const dataRef = useRef([data1, data2, data3, data3]);
dataRef.current = [data1, data2, data3, data3];
const isDone = data1?.data && data2?.data && data3?.data && data4?.data;
useEffect(() => {
if (isDone) {
setState1(dataRef.current[0]);
setState2(dataRef.current[1]);
setState3(dataRef.current[2]);
setState4(dataRef.current[4]);
}
}, [isDone])
这里只是提供思路,换我的话我是不会用四个 state 来维护状态。
