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 小时前
effect 副作用相关
前端
golang学习记3 小时前
从0死磕全栈之Next.js 生产环境优化最佳实践
前端
Mintopia4 小时前
🧠 Next.js 还是 Nuxt.js?——当 JavaScript 碰上命运的分叉路
前端·后端·全栈
5pace4 小时前
Mac Nginx安装、启动、简单命令(苍穹外卖、黑马点评前端环境搭建)
java·前端·nginx·macos·tomcat
Learn Beyond Limits4 小时前
如何在Mac进行Safari网页长截图?
前端·macos·safari·方法·操作·功能·开发者平台
阿珊和她的猫4 小时前
深入剖析 Vue Router History 路由刷新页面 404 问题:原因与解决之道
前端·javascript·vue.js
IT_陈寒5 小时前
Vue3性能提升30%的秘密:5个90%开发者不知道的组合式API优化技巧
前端·人工智能·后端
我是华为OD~HR~栗栗呀5 小时前
华为od-22届考研-C++面经
java·前端·c++·python·华为od·华为·面试
老黄编程5 小时前
FireFox如何滚动截屏?
前端·firefox