React中hooks使用限制及保存函数组件状态

news/2024/7/15 19:12:41 标签: react.js, javascript, 前端

React Hooks 的限制主要有两条:

  • 不要在循环、条件或嵌套函数中调用 Hook;

  • 在 React 的函数组件中调用 Hook。

首先,Hooks是一个对象,大致结构如下:

javascript">const hook: Hook = {
  memoizedState: null,
  baseState: null,
  baseQueue: null,
  queue: null,
  next: null,  // 指向下一个hook
};

不同类型hook的memoizedState保存不同类型数据,例如:

useState:对于const [state, updateState] = useState(initialState),memoizedState保存state的值

useReducer:对于const [state, dispatch] = useReducer(reducer, {});,memoizedState保存state的值。

一个组件中的hook会以链表的形式串起来,其中:

fiberNode.memoizedState:所保存的是Hook链表里面的第一个链表

hook.memoizedState:某个hook自身的数据

在更新时,会复用之前的Hook,若通过if条件语句或者增加或者删除hooks,在复用hooks时,会产生复用hooks状态和当前hooks不一致的问题。


http://www.niftyadmin.cn/n/5384971.html

相关文章

【k8s初始化过程解析】

k8s初始化过程解析 [rootk8s-master ~]# kubeadm init –apiserver-advertise-address10.10.10.100 –image-repository registry.aliyuncs.com/google_containers –kubernetes-version v1.25.0 –service-cidr10.1.0.0/16 –pod-network-cidr10.2.0.0/16 –cri-socket …

美国发布2024版关键和新兴技术清单

文章目录 前言一、美国新兴技术清单来源二、美国2024年版关键和新兴技术清单具体内容前言 2024年2月,美国国家科学技术委员会(NSTC)发布了新一版关键和新兴技术(Critical and emerging technologies, CETs)清单。CETs清单以美国2020年发布的《关键和新兴技术国家战略》为…

鸿蒙Next怎么升级,有便捷的方法?

早在2023年11月,市场上有自媒体博主表示,华为HarmonyOS NEXT的升级计划是2X年底到2X年初完成一亿部,2X年底完成三亿部。虽然该博主没有明确具体年份,但预计是2024年底2025年初升级一亿部HarmonyOS NEXT设备,2025年底完…

使用 Next.js 连接 mysql 数据库

前言 本文主要为大家介绍,如何使用 Next 框架实现一个简单的后端接口,并且从数据库中请求数据返回给前端。 实现 创建api/getData文件夹 项目创建完成后在 app 文件下新建api文件夹,在 api 文件夹下新建 getData 文件夹,在 ge…

openssl3.2 - 编译 - zlib.dll不要使用绝对路径

文章目录 openssl3.2 - 编译 - 编译时的动态库zlib.dll不要使用绝对路径概述测试zlib特性在安装好的目录中是否正常笔记70-test_tls13certcomp.t80-test_cms.t对测试环境的猜测从头再编译测试安装一次测试一下随便改变位置的openssl用到zlib时是否好使测试一下随便改变位置的op…

vue复用组件出现data-v-xxx乱码无法通过css修改指定样式

vue复用组件出现data-v-xxx乱码无法通过css修改指定样式解决方案如下 选择需要修改的样式 给最高级父级元素定义新的classname 与原有样式保持相同级联 修改指定样式 .demo_parent .demo_son .demo_grandson[data-v-73a2ee76]{ padding: 0; border-radius: 3px; background: #…

2024年2月19日 - mis

当需要在两个或多个子模式间插入文本时,这个特性尤其有用。这里有个脚本,它使用子模式在大数字中插入逗号。 $ echo "1234567" | sed { > :start > s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/ > t start > } 1,234,567 $​ 这个脚本将匹…

Unity坦克炮台永远看向鼠标

Unity坦克炮台永远看向鼠标 原理:射线检测 从屏幕上鼠标的位置,垂直向内发射一条射线,得到射线交互点的坐标,炮台一直看向交互点即可。 代码 public GameObject 炮台; private Ray MouseRay; private RaycastHit MouseRaycast…