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

react中hooks使用限制

  1. 只能在最顶层使用Hook
    不要在循环、条件中调用hook,确保总是在React函数最顶层使用它们

  2. 只能React函数中调用Hook
    不要在普通的js函数中调用
    在React的函数组件中调用Hook
    在自定义hook中调用其他hook

原因:
我们每次的状态值或者依赖项存在哪里,是存在Fiber节点上的,然后才能比较前后两次,但是普通的函数是没有Fiber节点的。所以无法使用。

hooks是作为一个单链表存储在fiber.memoizedState上的,因为这些hook没有名字,所以为了区分它们,我们必须保证这个链表节点顺序的稳定性。

import {useState, useReducer, useEffect} from "react";function FunctionComponent() {const [count, setCount] = useState(0);const [count2, dispatch] = useReducer((x) => x + 1, 0);useEffect(() => {console.log("count"); //sy-log}, [count]);return (<div className="function border"><button onClick={() => setCount(count + 1)}>{count}</button><button onClick={() => dispatch()}>{count2}</button></div>);
}const jsx = <FunctionComponent />;export default jsx;

我们可以在react源码中打印fiber看看hooks是怎么存储的?
在这里插入图片描述
next又指向下一个hook

可以简单看看构建链表如何构建的?
第0个hook挂载到memoizedState上,后面的都挂载到next上。
在这里插入图片描述

http://www.lryc.cn/news/319971.html

相关文章:

  • 2024抖音矩阵云混剪系统源码 短视频矩阵营销系统
  • 力扣题目训练(22)
  • [ROS 系列学习教程] rosbag Python API
  • TCL管理Vivado工程
  • R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第四:trans_beta class
  • Excel文件导入导出,SpringBoot整合EasyExcel批量导入导出,采用的JDBC+EasyExcel(附带整个Demo)
  • Git——本地使用详解
  • 深度学习pytorch——Tensor维度变换(持续更新)
  • Selenium-webdriver_manager判断是否已经下载过驱动(复用缓存驱动)
  • 【SQL】1174. 即时食物配送 II (窗口函数row_number; group by写法;对比;定位错因)
  • mvcc介绍
  • 强化PaaS平台应用安全:关键策略与措施
  • K8s 集群高可用master节点ETCD挂掉如何恢复?
  • 【Godot 4.2】常见几何图形、网格、刻度线点求取函数及原理总结
  • 如何利用POI导出报表
  • 自动部署SSL证书到阿里云腾讯云CDN
  • 【系统性】 循序渐进学C++
  • rust - 一个日志缓存记录的通用实现
  • elasticsearch(RestHighLevelClient API操作)(黑马)
  • 用尾插的思想实现移除链表中的元素
  • 【Kubernetes】k8s删除master节点后重新加入集群
  • HCIP—OSPF虚链路实验
  • RAxML-NG安装与使用-raxml-ng-v1.2.0(bioinfomatics tools-013)
  • Tomcat内存马
  • pytorch之诗词生成3--utils
  • OpenAI的ChatGPT企业版专注于安全性、可扩展性和定制化。
  • JS06-class对象
  • 深度学习1650ti在win10安装pytorch复盘
  • Node.js与webpack(三)
  • 测试覆盖率那些事