useState在异步函数中没有正确的时机更新值,试了网上查询的方法,比如使用useEffect监控isLoading的值,或者是setIsLoading使用回调方法,但是都没有用,从控制台上看的话似乎是什么东西堵塞了setIsLoading的执行,因为execute被正确执行了,并且resule的结果也是正确的,而isLoading的更新是在execute函数执行完后才更新为true的。自己琢磨了很久,依然无法解决
const [isLoading, setIsLoading] = useState<boolean>(false);
const execute = useCallback(
async (input: TInput) => {
// 设置加载状态
setIsLoading((prev) => {
console.log("isLoading changed:", prev);
return true;
});
try {
// 执行操作并获取结果
const result = await action(input);
// 判断结果是否为空
if (!result) {
return;
}
// 更新字段错误信息
setFieldErrors(result.fieldErrors);
// 判断是否有错误信息
if (result.error) {
setError(result.error);
options.onError?.(result.error);
}
// 更新数据信息
if (result.data) {
setData(result.data);
options.onSuccess?.(result.data);
}
} finally {
// 设置加载状态为false
setIsLoading((prev) => {
console.log("isLoading changed:", prev);
return false;
});
options.OnComplete?.();
}
},
[action, options]
);