• react hook 获取setState的新值


    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    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
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用方法:

    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 (
        
    ) }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    Android AMS——ATMS解析(四)
    Vue刷新后页面数据丢失问题的解决过程
    beetlsql3.x版本适配达梦数据库
    【JavaScript】一文了解事件对象
    Hydra工具的使用
    【Java万花筒】从开发到测试:嵌入式数据库与键值存储库全方位指南
    npm install如何知道使用nodejs太低
    按键控制LED灯亮灭
    Kubernetes Scheduler全解析
    Flume启停脚本f1.sh
  • 原文地址:https://blog.csdn.net/qq_41167198/article/details/134480046