UNPKG

@gdjiami/hooks

Version:

react hooks for mygzb.com

34 lines (31 loc) 1.12 kB
import { useState, useRef, useCallback } from 'react'; /** * 扩展useState,新增了getValue作为第三个参数,可以用于在被缓存的callback中获取到最新的值 * * 在闭包环境,有时候为了性能问题,会使用useCallback缓存回调函数,如果在这个回调函数中依赖外部的 * 状态,就会导致问题,它会缓存会回调创建时的环境。也就是依赖的外部变量是旧的 */ export default function useRefState(initialState) { var ins = useRef(); var _useState = useState(function () { // 初始化 var value = typeof initialState === 'function' ? initialState() : initialState; ins.current = value; return value; }), state = _useState[0], setState = _useState[1]; var setValue = useCallback(function (value) { if (typeof value === 'function') { setState(function (prevState) { var finalValue = value(prevState); ins.current = finalValue; return finalValue; }); } else { ins.current = value; setState(value); } }, []); return [state, setValue, ins]; }