From c60ee96be1205281c9684d1ee3ec7ec122fdbccf Mon Sep 17 00:00:00 2001 From: Tyler Swavely Date: Fri, 23 Aug 2019 10:35:05 -0700 Subject: [PATCH] chore(useSetState): check useSetState for memoized callback --- src/__tests__/useSetState.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/__tests__/useSetState.test.ts b/src/__tests__/useSetState.test.ts index 684ba30b..4f3b1e39 100644 --- a/src/__tests__/useSetState.test.ts +++ b/src/__tests__/useSetState.test.ts @@ -40,3 +40,21 @@ it('should merge changes into current state when providing function', () => { expect(result.current[0]).toEqual({ foo: 'bar', count: 2, someBool: true }); }); + +/** + * Enforces cases where a hook can safely depend on the callback without + * causing an endless rerender cycle: useEffect(() => setState({ data }), [setState]); + */ +it('should return a memoized setState callback', () => { + const { result, rerender } = setUp({ ok: false }); + const [, setState1] = result.current; + + act(() => { + setState1({ ok: true }); + }); + rerender(); + + const [, setState2] = result.current; + + expect(setState1).toBe(setState2); +});