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];
}
相关推荐
KingCodeHan6 分钟前
ESLint 完全指南:从入门到精通
前端
GHL28427109022 分钟前
安装chrome浏览器
前端·chrome
谙忆102427 分钟前
WebCodecs 实战:用 ImageDecoder 和 VideoFrame 在浏览器里做硬件加速的帧处理
前端
JerrySir30 分钟前
密码没泄露,2FA 也没失效:Chrome 146 为什么还要让 Cookie“搬不走”?
前端
小蚂蚁i30 分钟前
React Hooks 原理深度解析:从会用到真正懂
前端·react.js
触底反弹36 分钟前
Vue 实战:手把手教你实现 ChatGPT 同款打字机效果
前端·javascript·人工智能
BreezeJiang38 分钟前
Vue 3 流式输出实战:ReadableStream + DeepSeek API 实现打字机对话
前端
用户EasyAdminBlazor44 分钟前
EasyAdminBlazor 第十篇:数据导入导出——批量处理不再麻烦
前端·后端
饮茶三千1 小时前
电子保函模板编辑器实战二:HTML→FTL 编译转换的设计与实现
前端·vue.js·设计模式
ricardo19731 小时前
SSR / SSG 性能对比:Next.js 三种渲染模式实测数据
前端·面试