Hooks 使用规则

news/2025/1/19 10:55:11/

Hooks 使用规则

命名规则

Hook 必须 useXxx 格式来命名。

PS:这种命名规则也很易读,简单粗暴

调用位置

Hook 或自定义 Hook ,只能在两个地方被调用

  • 组件内部
  • 其他 Hook 内部

组件外部,或一个普通函数中,不能调用 Hook

顺序一致

Hook 在每次渲染时都按照相同的顺序被调用。

  • Hook 必须是组件“第一层代码”
  • Hook 不可放在 if 等条件语句中 ( 或者前面有 return ,也算是条件 )
  • Hook 不可放在 for 等循环语句中

代码演示

闭包陷阱

异步函数中获取 state 时,可能不是最新的 state 值。

解决方案:替换为 useRef —— 但 ref 变化不会触发 rerender ,所以得结合 state 一起

代码参考 src/pages/ClosureTrap.tsx

import React, { FC, useState, useRef, useEffect } from 'react'const Demo: FC = () => {const [count, setCount] = useState(0)const countRef = useRef(0)useEffect(() => {countRef.current = count}, [count])function add() {setCount(count + 1)}function alertFn() {setTimeout(() => {//   alert(count) // count 值类型alert(countRef.current) // ref 引用类型}, 3000)}return (<><p>闭包陷阱</p><div><span>{count}</span><button onClick={add}>add</button><button onClick={alertFn}>alert</button></div></>)
}export default Demo

http://www.ppmy.cn/news/1564390.html

相关文章

MySQL(高级特性篇) 06 章——索引的数据结构

一、为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录部分&#xff0c;通过目录找到对应文章的页码&#xff0c;便可快速定位到需要的文章。MySQL中也是一样的道理&#xff0c;进行数据查找时&#xff0c;首先查看查询条件…

C语言工具SNPRINTF函数

该函数包含在标准库中&#xff0c;以打印函数的格式将数据存入函数参数指定的数组中。 发现这个函数是在学习单片机I2C的软件应用时&#xff0c;需要将MPU6050陀螺仪模块的16位有符号数据通过串口发送到电脑进行调试。 应用中案例代码如下&#xff1a; void int16ToString(i…

飞牛os使用ddns-go配合华为云实现内网穿透

DDNS-Go 是一个开源的动态域名解析工具&#xff0c;它支持多种操作系统&#xff0c;包括 Windows、Mac 和 Linux&#xff0c;并且支持 ARM 和 x86 架构。以下是使用 DDNS-Go 的基本步骤&#xff1a; 1.下载和安装&#xff1a; 访问 DDNS-Go 的 GitHub 仓库&#xff08;&#xf…

从零开始打造AI知识库:使用爬虫自动化采集网页内容的完整教程

言简意赅的讲解crawler爬虫解决的痛点 童鞋们在实现私有化大语言模型和实现精准参数归纳与程序执行之后还是不满足AI相关的能力。在 AI 驱动的知识管理时代&#xff0c;快速搭建属于自己的知识库已成为很多开发者和团队的核心需求。本文将带你一步步创建一个基于网页爬取的知识…

细说STM32F407单片机独立看门狗IWDG的原理及使用方法

目录 一、独立看门狗的工作原理 二、独立看门狗的HAL驱动程序 1、初始化函数HAL_IWDG_Init() 2、刷新看门狗的函数HAL_IWDG_Refresh() 3、宏函数 三、独立看门狗使用示例 1、项目动作说明 2、工程配置 &#xff08;1&#xff09;DEBUG、USART6、GPIO、CodeGenrator &…

【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目

解决idea至少创建jdk17项目 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗 我本来以为是 IDEA 版本更新导致的 Bug&#xff0c;开始还没在意。 直到我今天自己初始化项目时才发现&am…

BGP边界网关协议(Border Gateway Protocol)概念、邻居建立

一、定义 主要用于交换AS之间的可达路由信息&#xff0c;构建AS域间的传播路径&#xff0c;防止路由环路的产生&#xff0c;并在AS级别应用一些路由策略。当前使用的版本是BGP-4。 二、环境 底层以OSPF进行igp互联互通&#xff0c;上层使用BGP协议。 三、基本原理 1、BGP是一…

MySql操作指南5--事务与并发控制

数据库事务是保障数据一致性和可靠性的重要手段&#xff0c;并发控制则在多用户环境下确保数据的正确性。风云今天详细探讨数据库事务的管理、并发访问的最佳实践&#xff0c;乐观锁与悲观锁的应用&#xff0c;以及Golang 中的事务实现、并发访问的最佳实践&#xff0c;通过合理…