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

react hook 获取setState的新值

  1. 利用useRef 存储最新值
 	let [count,setCount] = useState(0)let countRef = useRef(count)let handleClick = function (){setCount((prev)=>{countRef.current = prev+1return countRef.current})console.info(countRef.current)}
  1. 利用useRef
	let [count,setCount] = useState(0)let countRef = useRef(count)countRef.current = countlet handleClick = function (){setCount((prev)=>{return prev+1})setTimeout(()=>{console.info(countRef.current)})}
  1. 封装一个自定义函数
//useSyncCallback.js
import {useEffect,useState,useCallback} from 'react'
export default function useSyncCallback(callback){const [proxyState, setProxyState] = useState({ current: false });const Func = useCallback(() => {setProxyState({ current: true });}, [proxyState])useEffect(() => {if (proxyState.current === true) setProxyState({ current: false });}, [proxyState]);useEffect(() => {proxyState.current && callback();});return Func
};

使用方法:

import React,{useState,useCallback,useRef} from 'react'
import {Button,Input} from 'antd'
import HighFrequency from '../../utils/HighFrequency';
import useSyncCallback from '../../utils/useSyncCallback'export default function HookOptimization() {let [name,setName]=useState('_')let handleChange = HighFrequency.debounce(function(e){setName(()=>{return e.target.value})fnc()})const fnc = useSyncCallback(() => {console.log(name)})return (<div><Input onChange={handleChange}/></div>)}

相关文章:

  • 146. LRU 缓存
  • 蓝桥杯每日一题2023.11.16
  • 51.Sentinel微服务保护
  • 网络运维Day18
  • YOLOV5部署Android Studio安卓平台NCNN
  • 从零开始的C++(十七)
  • flask创建步骤
  • 利用 Pandoc + ChatGPT 优雅地润色论文,并保持 Word 公式格式:Pandoc将Word和LaTeX文件互相转化
  • 第八章 应用参数为约束建模 P1|系统建模语言SysML实用指南学习
  • 迭代新品 | 第四代可燃气体监测仪,守护燃气管网安全快人一步
  • qt-C++笔记之treeWidget初次使用
  • Sql Server 2017主从配置之:事务日志传送
  • P3879 [TJOI2010] 阅读理解- 字典树
  • Java方法中不使用的对象应该手动赋值为NULL吗?
  • JS 新操作符 —— “?.”、“??”、“??=”
  • Java,console输出实时的转向GUI textbox
  • Java教程_软件开发基础
  • js 实现textarea输入字数提示
  • mockjs让前端开发独立于后端
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 创建一个Struts2项目maven 方式
  • 从输入URL到页面加载发生了什么
  • 当SetTimeout遇到了字符串
  • 翻译:Hystrix - How To Use
  • 构造函数(constructor)与原型链(prototype)关系
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 将 Measurements 和 Units 应用到物理学
  • 使用 @font-face
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Mac 上flink的安装与启动
  • postgresql行列转换函数
  • ###项目技术发展史
  • #mysql 8.0 踩坑日记
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)Google的Objective-C编码规范
  • ***原理与防范
  • *上位机的定义
  • 、写入Shellcode到注册表上线
  • ./configure,make,make install的作用
  • .java 9 找不到符号_java找不到符号
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET CLR Hosting 简介
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .Net8 Blazor 尝鲜
  • .netcore如何运行环境安装到Linux服务器
  • .net快速开发框架源码分享