react hook 获取setState的新值

news/2024/7/15 17:21:44 标签: react.js, javascript, 前端
  1. 利用useRef 存储最新值
 	let [count,setCount] = useState(0)
    let countRef = useRef(count)
    let handleClick = function (){
        setCount((prev)=>{
            countRef.current = prev+1
            return countRef.current
        })
            console.info(countRef.current)
    }
  1. 利用useRef
	let [count,setCount] = useState(0)
    let countRef = useRef(count)
    countRef.current = count
    let 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>
  )

}

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

相关文章

STM32外部中断(EXTI)与RTOS多任务处理的协同设计

当在STM32上使用外部中断&#xff08;EXTI&#xff09;与RTOS&#xff08;Real-Time Operating System&#xff0c;实时操作系统&#xff09;进行多任务处理时&#xff0c;需要设计合适的协同机制&#xff0c;以确保可靠的中断处理和任务调度。在下面的概述中&#xff0c;我将介…

基于深度学习的单帧图像超分辨率重建综述

论文标题&#xff1a;基于深度学习的单帧图像超分辨率重建综述作者&#xff1a; 吴 靖&#xff0c;叶晓晶&#xff0c;黄 峰&#xff0c;陈丽琼&#xff0c;王志锋&#xff0c;刘文犀发表日期&#xff1a;2022 年9 月阅读日期 &#xff1a;2023.11.18研究背景&#xff1a; 图像…

Egress Gateway

目录 文章目录 目录本节实战Egress Gateway访问外部服务1.Envoy 转发流量到外部服务2.控制对外部服务的访问3.直接访问外部服务总结 Egress 出口网关1.用 Egress gateway 发起 HTTP 请求2.用 Egress gateway 发起 HTTPS 请求 关于我最后 本节实战 实战名称&#x1f6a9; 实战&…

【漏洞复现】通达oa 前台sql注入

漏洞描述 通达OA(Office Automation)是一款企业级协同办公软件,旨在为企业提供高效、便捷、安全、可控的办公环境。它涵盖了企业日常办公所需的各项功能,包括人事管理、财务管理、采购管理、销售管理、库存管理、生产管理、办公自动化等。通达OA支持PC端和移动端使用,可以…

C#中的string和string builder有什么区别

在 C# 中&#xff0c;string 和 StringBuilder 都用于处理字符串&#xff0c;但它们之间存在一些关键的差异&#xff1a; 一、 不可变性&#xff1a; string 类型在 .NET 中是不可变的。这意味着一旦创建了一个 string 实例&#xff0c;就无法更改它。当你对 string 进行修改…

C语言--每日五道练习题--Day17

第一题 1.在switch语句的每个case块中&#xff0c;假定都是以break语句结束的&#xff0c;则此switch语句容易被改写为&#xff08; &#xff09;语句。 A&#xff1a;for B&#xff1a;while C&#xff1a;do D&#xff1a;if 答案及解析 D 如果每个case块后面都跟着break&…

【开源】基于Vue和SpringBoot的民宿预定管理系统

项目编号&#xff1a; S 058 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S058&#xff0c;文末获取源码。} 项目编号&#xff1a;S058&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…

深度解析 InterpretML:打开机器学习模型的黑箱

深度解析 InterpretML&#xff1a;打开机器学习模型的黑箱 机器学习模型的高性能往往伴随着模型的复杂性&#xff0c;这使得模型的决策过程变得不透明&#xff0c;难以理解。在这个背景下&#xff0c;可解释性机器学习成为了一个备受关注的领域。本文将介绍 InterpretML&#…