我知道这个问题是不寻常的,但是我需要发送请求,只要我没有在axios反应中完成状态。我使用useEffect通过动作来调度动作获取状态结束集状态,useEffect依赖是设置状态、调度、道具,但是它仍然只发送4-5个请求和停止。我也尝试了setTimout在500毫秒,但同样的结果。有谁有过同样的问题吗?
const status = useSelector((state: any) => state.reports.status);
useEffect(() => {
let timer: any = null;
if (status !== 'FINISH') {
timer = setTimeout(() => {
dispatch(getData(props.id));
}, 500);
}
return () => {
if (status === 'FINISH') {
clearTimeout(timer);
}
}
}, [ dispatch, status, props ])
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.1.0/umd/react-dom.production.min.js"></script>
发布于 2022-07-27 15:52:59
这是为我工作的
const [state, setState] = useState(false);
const status = useSelector((state: any) => state.reports.status);
useEffect(() => {
let timer: any = null;
if (status !== 'FINISHED') {
dispatch(getData(props.id));
// setting state after 1s or what you need
timer = setTimeout(() => {
setState(!state);
}, 1000);
}
return () => {
if (status === 'FINISHED') {
clearTimeout(timer);
}
}
}, [ status, getDataFetch, state, dispatch ])
发布于 2022-07-27 14:05:08
您必须创建一个状态,它基本上切换该值并将state
传递到useEffect
依赖项,因此状态值每次调用useEffect
时都会更改,直到您没有得到status值finished
,因为您可以看到下面的代码,我希望这是可行的。
const status = useSelector((state: any) => state.reports.status);
const [state, setState] = useState(false);
useEffect(() => {
if (status !== 'FINISH') {
setState(!state);
dispatch(getData(props.id));
}
}, [ dispatch, reportStatus, props, state ])
https://stackoverflow.com/questions/73139337
复制相似问题