当前位置: 首页 > article >正文

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、总结

这段代码的主要功能是:

  • 在组件加载时异步获取基本信息和电话号。
  • 在加载过程中更新状态以指示加载状态。
  • 处理获取的数据并重置表单的值。这种处理方式使得- 组件在加载数据时能够有效地管理状态和用户界面。

http://www.kler.cn/news/313876.html

相关文章:

  • 【docker npm】npm 私库
  • 《高等代数》线性相关和线性无关(应用)
  • C++之职工管理系统(细节Q)
  • Spring Boot集成Akka remoting快速入门Demo
  • Spring-关于IOC的解释及相关理解(如何从三个方面理解)
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-16
  • leetcode 380.O(1) 时间插入、删除和获取随机元素
  • 电脑ip会因为换了网络改变吗
  • JavaScript web API完结篇---多案例
  • Abp vNext(五)集成MQTTnet,可收发消息
  • 【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题六
  • Android架构组件中的MVVM模式实战应用与数据绑定技巧
  • Python精选200Tips:156-160
  • 力扣刷题--3033. 修改矩阵【简单】
  • 【sgCreateCallAPIFunctionParam】自定义小工具:敏捷开发→调用接口方法参数生成工具
  • 执行 npm报错 Cannot find module ‘../lib/cli.js‘
  • 电脑技巧:Win11家庭版和专业版之间的区别详解
  • KVM环境下制作ubuntu qcow2格式镜像
  • xml中的转义字符
  • 【我的 PWN 学习手札】tcache stash with fastbin double free —— tcache key 绕过
  • 前端web端项目运行的时候没有ip访问地址
  • 【信创】Linux上如何创建和管理自定义的 systemd 服务 _ 统信 _ 麒麟 _ 方德
  • 滑动窗口算法专题(1)
  • pgsql 分组查询方法
  • Python基础知识——字典排序(不断补充)
  • 数据库课程设计mysql
  • python-SZ斐波那契数列/更相减损数
  • 【Python】Anaconda插件:Sublime Text中的Python开发利器
  • 【数据结构初阶】链式二叉树接口实现超详解
  • InnoDB锁机制全解析