UNPKG

828 BJavaScriptView Raw
1import { useRef } from 'react';
2import { useMemoizedFn, useUpdate } from 'ahooks';
3export function usePropsValue(options) {
4 const {
5 value,
6 defaultValue,
7 onChange
8 } = options;
9 const update = useUpdate();
10 const stateRef = useRef(value !== undefined ? value : defaultValue);
11 if (value !== undefined) {
12 stateRef.current = value;
13 }
14 const setState = useMemoizedFn((v, forceTrigger = false) => {
15 // `forceTrigger` means trigger `onChange` even if `v` is the same as `stateRef.current`
16 const nextValue = typeof v === 'function' ? v(stateRef.current) : v;
17 if (!forceTrigger && nextValue === stateRef.current) return;
18 stateRef.current = nextValue;
19 update();
20 return onChange === null || onChange === void 0 ? void 0 : onChange(nextValue);
21 });
22 return [stateRef.current, setState];
23}
\No newline at end of file