react自定义useState hook获取更新后值

简介: 在业务中有比较多的场景需要在setState中获取更新后的值从而进行下一步的业务操作,因此自定义封装一个hook。

您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~

在业务中有比较多的场景需要在setState中获取更新后的值从而进行下一步的业务操作,在Class组件中可以通过:

this.setState({
   
    name: '123'
}, (newVal) => {
   
    console.log(newVal);
})

而react自身的useState hook并不支持这样做,通常是这样获取新值:

useEffect(() => {
   
    console.log(name);
}, [name])

自定义useState主要思路其实是基于useState和useEffect,在useEffect获取到状态变化时回调callback函数,从而拿到新值,直接上代码~

import {
    SetStateAction, useCallback, useState, useEffect, useRef } from 'react';

const useStateCallback = (defaultVal: any) => {
   
  const [state, setState] = useState(defaultVal);
  const listenRef = useRef<any>(); //监听新状态的回调器
  const _setState = useCallback((newVal: SetStateAction<any>, callback: Function) => {
   
    //更新业务
    listenRef.current = callback;
    setState(newVal);
  }, []);
  useEffect(() => {
   
    listenRef.current && listenRef.current(state); //回调新状态
  }, [state]);

  return [state, _setState];
};

export default useStateCallback;

其实hook本身就是多了一步在更新状态时把自定义的callback丢给useRef,让useRef长久保留在内存中,并且监听状态,在状态更新时调用内存中(useRef)中的回调函数,从而实现。

hooks其实本身并非高深的东西,其实hooks就是函数,而自定义hook其实就是基于react核心的一些hooks去根据我们的业务实现一些和状态有关的工具函数。

目录
相关文章
|
前端开发 JavaScript
深入理解并实践React Hooks —— useEffect与useState
深入理解并实践React Hooks —— useEffect与useState
484 1
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
1257 2
|
前端开发 JavaScript
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
|
编解码 前端开发 开发者
React 图片组件样式自定义:常见问题与解决方案
在 React 开发中,图片组件的样式自定义常因细节问题导致布局错乱、性能损耗或交互异常。本文系统梳理常见问题及解决方案,涵盖基础样式应用、响应式设计、加载状态与性能优化等,结合代码案例帮助开发者高效实现图片组件的样式控制。重点解决图片尺寸不匹配、边框阴影不一致、移动端显示模糊、加载失败处理及懒加载等问题,并总结易错点和最佳实践,助力开发者提升开发效率和用户体验。
428 22
|
Web App开发 移动开发 前端开发
React 视频播放器样式自定义实战指南
本文详细介绍了如何在React项目中实现视频播放器的样式自定义,涵盖HTML5 `&lt;video&gt;`标签的基础知识、CSS样式定制技巧及常见问题解决方案。针对全屏模式样式失效、移动端触摸事件冲突和进度条样式定制等问题提供了具体代码示例。同时,探讨了视频预加载策略和内存优化方法,并推荐了几款调试工具,帮助开发者提升用户体验和应用性能。
395 6
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生&lt;audio&gt;标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
514 12
|
前端开发
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
172 3
|
前端开发
React给antd中TreeSelect组件左侧加自定义图标icon
本文介绍了如何在React中为Ant Design的TreeSelect组件的每个树节点添加自定义图标,并解决了因缺少key属性而导致的警告问题,展示了如何通过递归函数处理treeData数据并为每个节点添加图标。
842 2
React给antd中TreeSelect组件左侧加自定义图标icon
|
前端开发 Python
React技术栈-React路由插件之自定义组件标签
关于React技术栈中React路由插件自定义组件标签的教程。
223 4
React技术栈-React路由插件之自定义组件标签
|
前端开发
React中函数式Hooks之useState的使用
本文介绍了React中函数式组件的Hooks——`useState`的使用方法。`useState`允许在函数式组件中使用状态,它返回一个数组,其中包含当前状态的值和更新该状态的函数。文章通过示例代码展示了如何声明状态变量和更新状态变量,包括对数值和对象状态的更新。此外,还展示了如何通过点击按钮触发状态更新,实现交互功能。
199 1