当前位置: 首页 > 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上。
在这里插入图片描述

相关文章:

react中hooks使用限制

只能在最顶层使用Hook 不要在循环、条件中调用hook&#xff0c;确保总是在React函数最顶层使用它们 只能React函数中调用Hook 不要在普通的js函数中调用 在React的函数组件中调用Hook 在自定义hook中调用其他hook 原因&#xff1a; 我们每次的状态值或者依赖项存在哪里&…...

2024抖音矩阵云混剪系统源码 短视频矩阵营销系统

2024抖音矩阵云混剪系统源码 短视频矩阵营销系统 矩阵营销系统多平台多账号一站式管理&#xff0c;一键发布作品。智能标题&#xff0c;关键词优化&#xff0c;排名查询&#xff0c;混剪生成原创视频&#xff0c;账号分组&#xff0c;意向客户自动采集&#xff0c;智能回复&am…...

力扣题目训练(22)

2024年2月15日力扣题目训练 2024年2月15日力扣题目训练563. 二叉树的坡度637. 二叉树的层平均值643. 子数组最大平均数 I304. 二维区域和检索 - 矩阵不可变154. 寻找旋转排序数组中的最小值 II 2024年2月15日力扣题目训练 2024年2月15日第二十二天编程训练&#xff0c;今天主要…...

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…...

TCL管理Vivado工程

文章目录 TCL管理Vivado工程1. 项目目录2. 导出脚本文件3. 修改TCL脚本3.1 project.tcl3.2 bd.tcl 4. 工程恢复 TCL管理Vivado工程 工程结构 1. 项目目录 config: 配置文件、coe文件等。doc: 文档fpga: 最后恢复的fpga工程目录ip: ip文件mcs: bit流文件等,方便直接使用src: .…...

R语言:microeco:一个用于微生物群落生态学数据挖掘的R包,第四:trans_beta class

trans_beta class&#xff1a;利用trans_beta类可以变换和绘制beta分集的距离矩阵。该类中涉及到beta多样性的分析主要包括排序、群距、聚类和方差分析。我们首先使用PCoA显示排序。 > dataset$cal_betadiv() The result is stored in object$beta_diversity ... > t1 &…...

Excel文件导入导出,SpringBoot整合EasyExcel批量导入导出,采用的JDBC+EasyExcel(附带整个Demo)

目录 0.为什么mybatis的foreach比JDBC的addBatch慢 1.引入依赖 2.Controller层 3.Service层 4.Utils工具类 5.自定义监听器 6.实体类 7Mapper层 不用Mybatis的原因就是因为在大量数据插入的时候jdbc性能比mybatis好1. 首先分批读取Excel中的数据 这一点EasyExcel有自己…...

Git——本地使用详解

目录 Git1、开始版本控制1.1、初始化Repository1.2、使目录脱离Git控制 2、把文件交给Git管控2.1、创建文件后交给Git2.2、git add之后再次修改文件2.3、git add "--all"与"."参数区别2.4、把暂存区的内容提交到存储库里存档 3、工作区、暂存区与存储库3.1…...

深度学习pytorch——Tensor维度变换(持续更新)

view()打平函数 需要注意的是打平之后的tensor是需要有物理意义的&#xff0c;根据需要进行打平&#xff0c;并且打平后总体的大小是不发生改变的。 并且一定要谨记打平会导致维度的丢失&#xff0c;造成数据污染&#xff0c;如果想要恢复到原来的数据形式&#xff0c;是需要…...

Selenium-webdriver_manager判断是否已经下载过驱动(复用缓存驱动)

1,谷歌浏览器默认位置 2&#xff0c;ChromeDriverManager 下载的驱动位置 其中admin为机器的用户名 def installDriver(self):"""判断是否需要下载driver""""""找到本机谷歌浏览器版本""""""C:\P…...

【SQL】1174. 即时食物配送 II (窗口函数row_number; group by写法;对比;定位错因)

前述 推荐学习&#xff1a; 通俗易懂的学会&#xff1a;SQL窗口函数 题目描述 leetcode题目&#xff1a;1174. 即时食物配送 II 写法一&#xff1a;窗口函数 分组排序&#xff08;以customer_id 分组&#xff0c;按照order_date 排序&#xff09;&#xff0c;窗口函数应用。…...

mvcc介绍

前提&#xff1a;在介绍mvcc之前&#xff0c;先简单介绍一下mysql事务的相关问题&#xff0c;mvcc归根结底是用来解决事务并发问题的&#xff0c;当然这个解决不是全部解决&#xff0c;只是解决了其中的一部分问题&#xff01; mysql事务 一、事务的基本要素&#xff08;ACID&a…...

强化PaaS平台应用安全:关键策略与措施

PaaS&#xff08;平台即服务&#xff0c;Platform-as-a-Service&#xff09;是一种云计算服务模式&#xff0c;可以为客户提供一个完整的云平台&#xff08;硬件、软件和基础架构&#xff09;以用于快捷开发、运行和管理项目&#xff0c;从而降低了企业云计算应用的高成本和复杂…...

K8s 集群高可用master节点ETCD挂掉如何恢复?

写在前面 很常见的集群运维场景&#xff0c;整理分享博文内容为 K8s 集群高可用 master 节点故障如何恢复的过程理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。——村上…...

【Godot 4.2】常见几何图形、网格、刻度线点求取函数及原理总结

概述 本篇为ShapePoints静态函数库的补充和辅助文档。ShapePoints函数库是一个用于生成常见几何图形顶点数据&#xff08;PackedVector2Array&#xff09;的静态函数库。生成的数据可用于_draw和Line2D、Polygon2D等进行绘制和显示。因为不断地持续扩展&#xff0c;ShapePoint…...

如何利用POI导出报表

一、报表格式 二、依赖坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version> </dependency> <dependency><groupId>org.apache.poi</groupId><art…...

自动部署SSL证书到阿里云腾讯云CDN

项目地址&#xff1a;https://github.com/yxzlwz/ssl_update 项目简介 目前&#xff0c;自动申请和管理免费SSL证书的项目有很多&#xff0c;如个人正在使用的 acme.sh。然而在申请后&#xff0c;如果我们的需求不仅限于服务器本地的使用&#xff0c;证书的部署也是一件麻烦事…...

【系统性】 循序渐进学C++

循序渐进学C 第一阶段&#xff1a;基础 一、环境配置 1.1.第一个程序&#xff08;基本格式&#xff09; ​ #include <iosteam> using namespace std;int main(){cout<<"hello world"<<endl;system("pause"); }​ 模板 #include &…...

rust - 一个日志缓存记录的通用实现

本文给出了一个通用的设计模式&#xff0c;通过建造者模式实例化记录对象&#xff0c;可自定义格式化器将实例化后的记录对象写入到指定的缓存对象中。 定义记录对象 use chrono::prelude::*; use std::{cell::RefCell, ffi::OsStr, fmt, io, io::Write, path::Path, rc::Rc,…...

elasticsearch(RestHighLevelClient API操作)(黑马)

操作全是换汤不换药&#xff0c;创建一个request&#xff0c;然后使用client发送就可以了 一、增加索引库数据 Testvoid testAddDocument() throws IOException {//从数据库查出数据Writer writer writerService.getById(199);//将查出来的数据处理成json字符串String json …...

提升协作效率:KityMinder云同步功能全链路应用指南

提升协作效率&#xff1a;KityMinder云同步功能全链路应用指南 【免费下载链接】kityminder 百度脑图 项目地址: https://gitcode.com/gh_mirrors/ki/kityminder 思维导图云协作是现代团队知识管理与项目协作的核心需求。KityMinder作为百度推出的专业思维导图工具&…...

Bilibili-Evolved:视频播放卡顿解决方案:实现60fps流畅体验的智能优化方法

Bilibili-Evolved&#xff1a;视频播放卡顿解决方案&#xff1a;实现60fps流畅体验的智能优化方法 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否曾在观看高清动画时遇到画面卡顿&…...

避开Verilog数据转换的坑:ASCII码转16进制时,大小写处理你真的做对了吗?

Verilog字符转换实战&#xff1a;如何正确处理ASCII与十六进制的大小写问题 在数字系统设计中&#xff0c;数据格式转换是最基础却又最容易出错的环节之一。最近在review团队一位新成员的UART通信模块代码时&#xff0c;发现一个典型的"大小写陷阱"——当十六进制数据…...

销售易发布AI原生CRM NeoAgent 2.0,引领行业迈入AI CRM 2.0时代

3月27日&#xff0c;在2026腾讯云城市峰会首站上海站&#xff0c;腾讯旗下CRM销售易重磅发布新一代营销服全场景AI原生CRM——NeoAgent 2.0。这不仅是产品迭代&#xff0c;更是销售易基于全新架构打造的智能体产品矩阵&#xff0c;标志着CRM开始从“管理工具”向“企业数字员工…...

CBF文件:统一刷写流程的密钥与工程实践

1. CBF文件&#xff1a;汽车电子刷写的"万能钥匙" 第一次接触CBF文件是在2018年参与某新能源车厂的项目时。当时产线上几十种ECU&#xff08;电子控制单元&#xff09;需要刷写&#xff0c;每个供应商提供的刷写包格式五花八门——有的用HEX文件&#xff0c;有的用S1…...

hadoop+spark+hive基于大数据的食谱分析与个性化推荐系统 美食推荐系统 美食可视化 大数据毕业设计

前言随着互联网技术的快速发展&#xff0c;人们获取信息的方式发生了巨大变化。特别是在食品领域&#xff0c;用户渴望获得更加个性化的推荐服务。大数据分析技术的出现为满足这一需求提供了可能。并据此提供精准的食谱推荐&#xff0c;从而提升用户体验。系统架构设计本项目 采…...

JekyllNet .Net 版本的Jekyll , 你博客 文档的静态生成利器 。

若君只欲一篇而尽知 JekyllNet 今可如何用&#xff0c;此文即其总册。 项目入口 仓库地址&#xff1a;https://github.com/JekyllNet/JekyllNet文档网站&#xff1a;https://jekyllnet.helpGitHub Pages 站点入口(仓库 Pages)&#xff1a;https://jekyllnet.github.io/JekyllNe…...

如何搭建与使用 `ZhongFuCheng3y/austin` 开源项目

如何搭建与使用 ZhongFuCheng3y/austin 开源项目 【免费下载链接】austin 消息推送平台&#x1f525; 推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。 项目地址: https://gitcode.com/GitHub_Trending/au/austin 本教程旨在帮助…...

3分钟解锁暗黑破坏神2完整体验:PlugY插件终极指南 [特殊字符]

3分钟解锁暗黑破坏神2完整体验&#xff1a;PlugY插件终极指南 &#x1f3ae; 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 还在为暗黑破坏神2单机模式的种种限制而…...

如何极速获取金融市场数据:5分钟实战指南

如何极速获取金融市场数据&#xff1a;5分钟实战指南 【免费下载链接】qstock qstock由“Python金融量化”公众号开发&#xff0c;试图打造成个人量化投研分析包&#xff0c;目前包括数据获取&#xff08;data&#xff09;、可视化(plot)、选股(stock)和量化回测&#xff08;策…...