@gdjiami/hooks
Version:
react hooks for mygzb.com
34 lines (33 loc) • 1.28 kB
JavaScript
import { __read } from "tslib";
import { useState, useRef, useCallback, } from 'react';
/**
* 扩展useState,新增了getValue作为第三个参数,可以用于在被缓存的callback中获取到最新的值
*
* 在闭包环境,有时候为了性能问题,会使用useCallback缓存回调函数,如果在这个回调函数中依赖外部的
* 状态,就会导致问题,它会缓存会回调创建时的环境。也就是依赖的外部变量是旧的
*/
export default function useRefState(initialState) {
var ins = useRef();
var _a = __read(useState(function () {
// 初始化
var value = typeof initialState === 'function'
? initialState()
: initialState;
ins.current = value;
return value;
}), 2), state = _a[0], setState = _a[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];
}