mirror of
https://github.com/zhigang1992/react.git
synced 2026-04-24 04:15:54 +08:00
feat(utils): support lambda mode to update current-state
This commit is contained in:
@@ -13,6 +13,15 @@ describe('UseCurrentState', () => {
|
||||
expect(result.current[2].current).toEqual('test')
|
||||
})
|
||||
|
||||
it('functional update mode should be supported', () => {
|
||||
const { result } = renderHook(() => useCurrentState(0))
|
||||
expect(result.current[0]).toEqual(0)
|
||||
|
||||
act(() => result.current[1](pre => pre + 10))
|
||||
expect(result.current[0]).toEqual(10)
|
||||
expect(result.current[2].current).toEqual(10)
|
||||
})
|
||||
|
||||
it('only ref should track latest value', () => {
|
||||
const Mock: React.FC<{}> = () => {
|
||||
const [state, setState, stateRef] = useCurrentState('')
|
||||
|
||||
@@ -12,9 +12,10 @@ const useCurrentState = <S,>(initialState: S): CurrentStateType<S> => {
|
||||
ref.current = state
|
||||
}, [state])
|
||||
|
||||
const setValue = (val: S) => {
|
||||
ref.current = val
|
||||
setState(val)
|
||||
const setValue = (val: SetStateAction<S>) => {
|
||||
const result = typeof val === 'function' ? (val as ((prevState: S) => S))(ref.current) : val
|
||||
ref.current = result
|
||||
setState(result)
|
||||
}
|
||||
|
||||
return [state, setValue, ref]
|
||||
|
||||
Reference in New Issue
Block a user