封装 useUpdate 钩子

简介: 封装 useUpdate 钩子

上一篇博客里面提到了,函数组件在模仿类组件的生命周期钩子时,需要使用 React 推出的 useEffect() 方法,这个方法接收两个参数,第一个是要执行的函数,第二个参数是空,或一个数组,表示函数的调用时机。基于 useEffect() 方法我们可以模仿类组件的大部分生命周期钩子,但是有一个不行,就是 componentDidUpdate()。


之所以不能模仿类组件的 componentDidUpdate() 钩子是因为,useEffect 在监听变量变化时会将变量从无到有的过程也算作是一次变化,而在类组件中 componentDidUpdate() 钩子是不会监听数据的第一渲染时的变化的。


基于上述背景,我们尝试自己封装一个 hook ,来模拟类组件中的 componentDidUpdate() 钩子。

/*封装useUpdate()*/                                  import useUpdate from './useUpdate.js'
const useUpdate = (fun, variable){                   const App = props => {
    const [count, setCount] = usestate(0);               const [n, setN] = React. useState(0);
    useEffect(() => {                                    const addN = () => {
        setCount(count => count+1);                          setN(n+1);
    }, variable);                                        }
    useEffect(() => {                                    useUpdate (() => {
        if(count > 1){                                       console.Log(' 数据发生变化了')
            fun();                                        }, variable)
    }, [count]);                                         return (
};                                                          <div>{n}
export default useUpdate                                         <button onclick={ addN}>+1</button>
                                                             </div>
                                                         )
                                                     }
目录
相关文章
|
消息中间件 缓存 监控
订单系统的优化
订单系统的优化
|
Java API 计算机视觉
阿里云新版人脸识别Java使用示例教程
之前阿里云人脸识别只提供人脸检测,人脸属性及人脸对比三个API接口,关于这方面的介绍及使用细节,可以参考阿里云人脸识别使用流程简介,之前使用的服务地址为:dtplus-cn-shanghai.data.aliyuncs.com。目前新版本加入了1:N人脸查找的功能,新版本还处于公测阶段,服务地址:face.cn-shanghai.aliyuncs.com。下面主要介绍如何使用新版本的地址调用之前的三个API的功能。
2821 0
|
分布式计算 安全 数据安全/隐私保护
挠场的科学丨二、无线电力传送与特斯拉遗失的文件
挠场的科学丨二、无线电力传送与特斯拉遗失的文件
236 0
|
机器学习/深度学习 算法 TensorFlow
深度学习中的自编码器:从理论到实践
【8月更文挑战第29天】本文旨在揭示自编码器的神秘面纱,带领读者领略其在数据表示学习中的独特魅力。我们将从其数学原理出发,逐步深入到网络架构的搭建,最后通过代码示例实现一个简易的自编码器模型。无论是深度学习新手还是经验丰富的研究者,这篇文章都将为你提供新的视角和实用知识。
|
存储 关系型数据库 MySQL
"Linux环境下MySQL数据库名及表名大小写敏感性设置详解:从配置到影响,确保数据库操作的准确与高效"
【8月更文挑战第9天】在Linux环境中,MySQL数据库名及表名的大小写敏感性是一项重要配置。默认情况下,MySQL在Linux上区分大小写,但这可通过配置文件 `/etc/my.cnf` 中的 `lower_case_table_names` 参数调整。该参数设为0时,名称存储时保持原样,查询时不区分大小写;设为1则全部转换为小写。通过编辑配置文件并重启MySQL服务,可根据需求灵活控制名称的大小写敏感性,确保数据一致性和应用兼容性。
953 3
|
关系型数据库 MySQL Go
Go - 代码生成工具
Go - 代码生成工具
96 3
|
存储 小程序 API
【微信小程序-原生开发+云开发+TDesign】修改用户头像(含wx.chooseMedia,wx.cloud.uploadFile,wx.cloud.deleteFile的使用)
【微信小程序-原生开发+云开发+TDesign】修改用户头像(含wx.chooseMedia,wx.cloud.uploadFile,wx.cloud.deleteFile的使用)
213 0
【微信小程序-原生开发+云开发+TDesign】修改用户头像(含wx.chooseMedia,wx.cloud.uploadFile,wx.cloud.deleteFile的使用)
|
机器学习/深度学习 数据挖掘 Python
【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 问题二 时间突变分析 Python实现
第十届“泰迪杯”数据挖掘挑战赛B题中对电力系统负荷预测分析进行时间突变分析的Python实现方法,包括定义绘图函数、应用阈值查找异常值、手动设置阈值、使用分位数和3Sigma原则(IQR)设定阈值,以及根据分位数找到时间突变的步骤,并提供了完整代码的下载链接。
270 0
|
设计模式 存储 安全
技术好文共享:设计模式笔记:单件模式(Singleton)
技术好文共享:设计模式笔记:单件模式(Singleton)
141 0
|
Oracle 关系型数据库 数据库
PostgreSQL从入门到精通教程 - 第42讲:pg_rman部署与使用
PostgreSQL从入门到精通教程 - 第42讲:pg_rman部署与使用
302 1