Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 9x 9x 9x 9x 9x 1x 9x 1x 9x | import { useCallback } from 'react'
import { useLatest } from 'react-use'
import { useStateWithDeps } from './useStateWithDeps'
/**
* 暂存状态。
*/
export function useStaged<T>(
value: T,
setValue: (value: T) => void,
): [
T,
{
set: (value: T) => void
commit: () => void
reset: () => void
},
] {
const [stagedState, setStagedState] = useStateWithDeps(value, [value])
const valueRef = useLatest(value)
const setValueRef = useLatest(setValue)
const stagedStateRef = useLatest(stagedState)
const commitStagedState = useCallback(() => {
setValueRef.current(stagedStateRef.current)
}, [])
const resetStagedState = useCallback(() => {
setStagedState(valueRef.current)
}, [])
return [
stagedState,
{
set: setStagedState,
commit: commitStagedState,
reset: resetStagedState,
},
]
}
|