← All tasksReact · Middle

usePrevious hook

Write a usePrevious(value) hook that returns the value from the previous render. On the first render there's no previous value yet - return undefined.

This hook helps compare a prop with its old value, for example to animate a changing number.

Tests (3)

  1. const { result } = renderHook(({ v }) => usePrevious(v), { initialProps: { v: 1 } });
    expect(result.current).toBe(undefined);
  2. const { result, rerender } = renderHook(({ v }) => usePrevious(v), { initialProps: { v: 1 } });
    rerender({ v: 2 });
    expect(result.current).toBe(1);
  3. const { result, rerender } = renderHook(({ v }) => usePrevious(v), { initialProps: { v: 'a' } });
    rerender({ v: 'b' });
    rerender({ v: 'c' });
    expect(result.current).toBe('b');