|
1 | | -import { useState, useRef, useEffect, useCallback } from 'react' |
| 1 | +import { useState, useRef, useEffect } from 'react' |
2 | 2 |
|
3 | 3 | export function useRefState<S>(initialValue: S) { |
4 | 4 | const [state, setState] = useState<S>(initialValue) |
5 | | - const stateRef = useRef(state) |
6 | | - useEffect(() => { |
7 | | - stateRef.current = state |
8 | | - }, [state]) |
| 5 | + const stateRef = useRefEffect(state) |
| 6 | + |
9 | 7 | return [state, stateRef, setState] as [ |
10 | 8 | S, |
11 | 9 | React.MutableRefObject<S>, |
12 | 10 | React.Dispatch<React.SetStateAction<S>> |
13 | 11 | ] |
14 | 12 | } |
15 | 13 |
|
16 | | -export function useRefCallback<T extends (...args: any[]) => any>( |
17 | | - callback: T, |
18 | | - deps: React.DependencyList |
19 | | -) { |
20 | | - /* eslint-disable react-hooks/exhaustive-deps */ |
21 | | - const cb = useCallback(callback, deps) |
22 | | - |
23 | | - const callbackRef = useRef(cb) |
| 14 | +export function useRefEffect<S>(value: S) { |
| 15 | + const valueRef = useRef(value) |
24 | 16 |
|
25 | 17 | useEffect(() => { |
26 | | - callbackRef.current = cb |
27 | | - }, [cb]) |
| 18 | + valueRef.current = value |
| 19 | + }, [value]) |
28 | 20 |
|
29 | | - return [cb, callbackRef] as [T, React.MutableRefObject<T>] |
| 21 | + return valueRef |
30 | 22 | } |
31 | 23 |
|
32 | 24 | export function useCommittedRef<T>(value: T): React.MutableRefObject<T> { |
|
0 commit comments