React 的 useEffect 钩子,执行一些异步操作来加载基本信息

bash 复制代码
 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、总结

这段代码的主要功能是:

  • 在组件加载时异步获取基本信息和电话号。
  • 在加载过程中更新状态以指示加载状态。
  • 处理获取的数据并重置表单的值。这种处理方式使得- 组件在加载数据时能够有效地管理状态和用户界面。
相关推荐
vvw&6 小时前
如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程
linux·运维·服务器·前端·ubuntu·web·caddy
落日弥漫的橘_8 小时前
npm run 运行项目报错:Cannot resolve the ‘pnmp‘ package manager
前端·vue.js·npm·node.js
梦里小白龙8 小时前
npm发布流程说明
前端·npm·node.js
No Silver Bullet8 小时前
Vue进阶(贰幺贰)npm run build多环境编译
前端·vue.js·npm
怜渠客8 小时前
Google Chrome 去除更新 Windows
chrome·windows
破浪前行·吴9 小时前
【初体验】【学习】Web Component
前端·javascript·css·学习·html
泷羽Sec-pp9 小时前
基于Centos 7系统的安全加固方案
java·服务器·前端
IT 古月方源9 小时前
GRE技术的详细解释
运维·前端·网络·tcp/ip·华为·智能路由器
myepicure8889 小时前
Windows下调试Dify相关组件(1)--前端Web
前端·llm
用户59594399272199 小时前
大牛工程师告诉你:开关电源“Y电容”都是这样计算的!
前端