自定义hooks实现在useState改变值之后立刻获取到最新的值

自定义hooks实现在useState改变值之后立刻获取到最新的值

import React from 'react'
function App () {
 let [count, setCount] = React.useState(0)

 const add = () => {
   setCount(count + 1)
   console.log(count)
}

 return (

   <div>
     <h1>{count}</h1>
     <button onClick={add}>点我加 1 </button>
   </div>

)
}
export default App;

以上代码每次点击按钮得到的 count 值都是上一次的值

再来看看以下代码

import React from 'react'
import useSyncCallback from './hooks/hook'
function App () {
 let [count, setCount] = React.useState(0)
 
 const add = () => {
   setCount(count + 1)
   fnc()
}
 const fnc = useSyncCallback(() => {
   console.log(count)
})

 return (
   <div>
     <h1>{count}</h1>
     <button onClick={add}>点我加 1 </button>
   </div>
)
}
export default App;

以上代码可以得到更新之后的值

下面写上 useSyncCallback 函数的实现

import { useEffect, useState, useCallback } from "react";

const 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;
};

export default useSyncCallback;

 


__EOF__

本文作者嘿先生
本文链接https://www.cnblogs.com/liujis/p/16053144.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   这个名字没占用  阅读(879)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示