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 发生变化时才会重新执行。这确保了在这些值改变时重新加载基本信息。

这段代码的主要功能是:

  • 在组件加载时异步获取基本信息和电话号。
  • 在加载过程中更新状态以指示加载状态。
  • 处理获取的数据并重置表单的值。这种处理方式使得- 组件在加载数据时能够有效地管理状态和用户界面。
相关推荐
EF@蛐蛐堂几秒前
TanStack NPM攻击 揭秘及应对方案
前端·vue.js·npm·安全威胁分析
恋猫de小郭3 分钟前
终于,Flutter 修复 Android 中文字体异常,但是很草台,不知怎么吐槽
android·前端·flutter
Cobyte7 分钟前
11.响应式系统演进:深入剖析 computed 实现原理与性能优化实践(Vue3.3)
前端·javascript·vue.js
_Evan_Yao7 分钟前
计算机大一新生如何选择方向(前端/后端/AI/运维)?
运维·前端·人工智能·后端
ZC跨境爬虫7 分钟前
跟着MDN学HTML_day_46:(HTMLCollection与NodeList)
前端·javascript·ui·html·音视频
码途漫谈10 分钟前
Scrapling:让爬虫在现代 Web 里“活下来”的自适应抓取框架
前端·爬虫·ai·开源
极梦网络无忧14 分钟前
我开源了一个 Vue 3 动态表单组件库 —— real-vue3-easy-form
前端·vue.js·开源
ShyanZh16 分钟前
【Claude基础】多代理协作:Agent Teams 与编排模式
前端·chrome·ai
下载居19 分钟前
Google Chrome(谷歌浏览器64位) 148.0.7778
前端·chrome
MXN_小南学前端28 分钟前
Vue + Quill:富文本的添加、传输、展示逻辑,以及 csReplyQuill 组件封装
前端·vue.js