React 的 useEffect 钩子,执行一些异步操作来加载基本信息
useEffect(() => {
(async () => {
props.onLoad?.(true);
const res = await onLoadBasic();
const telephoneNo = await storage.get(TEL_CACHE_KEY);
props.onLoad?.(false, res);
const values = transformBasicInput(res, { telephoneNo, redo });
props.form.formRef?.reset?.(values);
})();
}, [props.form.formRef, redo]);
1、代码解析
1、useEffect:
useEffect 是一个 React Hook,允许你在函数组件中执行副作用操作(例如数据获取、订阅或手动 DOM 操作)。
第二个参数是依赖数组,只有在这些依赖发生变化时,useEffect 才会重新执行。
2、自执行异步函数:
(async () => { … })() 是一个自执行的异步函数,用于在 useEffect 中处理异步操作。
因为 useEffect 不能直接返回一个 Promise,所以需要使用自执行函数。
3、props.onLoad?.(true):
这是一个可选链调用,表示如果 onLoad 函数存在,则调用它并传入 true,通常表示开始加载数据。
4、const res = await onLoadBasic();:
调用 onLoadBasic 函数来异步获取基本信息,并将结果存储在 res 变量中。
5、const telephoneNo = await storage.get(TEL_CACHE_KEY);:
从某个存储(可能是本地存储或其他缓存机制)中获取电话号,存储在 telephoneNo 变量中。
6、props.onLoad?.(false, res);:
再次使用可选链,表示加载完成后调用 onLoad,传入 false 和获取的 res 结果。
7、 const values = transformBasicInput(res, { telephoneNo, redo });:
调用 transformBasicInput 函数,使用获取的基本信息 res 和其他数据(如 telephoneNo 和 redo)来转换输入值。
8、props.form.formRef?.reset?.(values);:
如果 formRef 和 reset 方法存在,调用 reset 方法,重置表单的值为 values。
2、依赖数组
- [props.form.formRef, redo]:
- useEffect 只有在 formRef 或 redo 发生变化时才会重新执行。这确保了在这些值改变时重新加载基本信息。
3、总结
这段代码的主要功能是:
- 在组件加载时异步获取基本信息和电话号。
- 在加载过程中更新状态以指示加载状态。
- 处理获取的数据并重置表单的值。这种处理方式使得- 组件在加载数据时能够有效地管理状态和用户界面。