state 状态相关

useGetState

React.useState 增加了一个 getter 方法,以获取当前最新值。

js 复制代码
import { useState, useCallback } from 'react';

export type SetState<S> = S | ((prevState: S) => S);

function useGetState<S>(initialState: S | (() => S)) {
  const [state, setState] = useState(initialState);
  
  // 使用 ref 保存最新的 state 值
  const stateRef = useRef(state);
  stateRef.current = state;
  
  // 获取当前状态的方法
  const getState = useCallback(() => stateRef.current, []);
  
  // 包装 setState,同时更新 ref
  const setSetState = useCallback((setStateAction: SetState<S>) => {
    setState(prevState => {
      const nextState = setStateAction instanceof Function 
        ? setStateAction(prevState) 
        : setStateAction;
      stateRef.current = nextState;
      return nextState;
    });
  }, []);

  return [state, setSetState, getState] as const;
}

useResetState

提供重置 state 方法的 Hooks,用法与 React.useState 基本一致。

js 复制代码
import { useState, useRef, useCallback } from 'react';

type Dispatch<T> = (value: T | ((prevState: T) => T)) => void;

function useResetState<S>(initialState: S | (() => S)): [S, Dispatch<S>, () => void] {
  const [state, setState] = useState(initialState);
  const initialRef = useRef(initialState);
  
  const reset = useCallback(() => {
    setState(initialRef.current);
  }, []);
  
  return [state, setState, reset];
}
相关推荐
几何心凉3 小时前
openGauss:多核时代企业级数据库的性能与高可用新标杆
前端·数据库·数据库开发
AiXed5 小时前
PC微信协议之AES-192-GCM算法
前端·数据库·python
AllData公司负责人5 小时前
实时开发平台(Streampark)--Flink SQL功能演示
大数据·前端·架构·flink·开源
小满zs6 小时前
Next.js第五章(动态路由)
前端
清沫6 小时前
VSCode debugger 调试指南
前端·javascript·visual studio code
一颗宁檬不酸6 小时前
页面布局练习
前端·html·页面布局
金木讲编程8 小时前
Claude、Agent与Copilot协作生成Angular应用
前端·ai编程
振华OPPO8 小时前
Vue:“onMounted“ is defined but never used no-unused-vars
前端·javascript·css·vue.js·前端框架
欧雷殿9 小时前
在富阳银湖成立地域化的软件研发团队
前端·程序员·创业
狂炫冰美式9 小时前
前端实时推送 & WebSocket 面试题(2026版)
前端·http·面试