From fe2fb36682b5981b441038a86301b3883c5ce8c7 Mon Sep 17 00:00:00 2001 From: Jaideep Pannu <jaideeppannu@Jaideeps-MacBook-Air.local> Date: Sun, 21 May 2023 00:01:29 +0530 Subject: [PATCH] fix(useField): Fix no re-render on initialValue change --- src/useField.js | 7 +++++-- src/useField.test.js | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/useField.js b/src/useField.js index c6ffa68..5aff878 100644 --- a/src/useField.js +++ b/src/useField.js @@ -112,11 +112,14 @@ function useField<FormValues: FormValuesShape>( React.useEffect( () => - register((state) => { + register((newState) => { if (firstRender.current) { firstRender.current = false; + if(state.initial != newState.initial){ + setState(newState); + } } else { - setState(state); + setState(newState); } }, false), // eslint-disable-next-line react-hooks/exhaustive-deps diff --git a/src/useField.test.js b/src/useField.test.js index 1277f1c..0b07e32 100644 --- a/src/useField.test.js +++ b/src/useField.test.js @@ -455,4 +455,27 @@ describe("useField", () => { expect(spy.mock.calls[3][1]).toBe(spy.mock.calls[2][1]); // onFocus expect(spy.mock.calls[3][2]).toBe(spy.mock.calls[2][2]); // onBlur }); + + it("should listen to initial value 2", () => { + const MyFieldListener = () => { + const isFirstRender = React.useRef(true) + const { input, meta } = useField("name"); + if(!isFirstRender.current){ + expect(meta.initial).toBe("test"); + // expect(input.value).toBe("test"); + } + isFirstRender.current = false + return null; + }; + render( + <Form onSubmit={onSubmitMock}> + {() => ( + <form> + <MyFieldListener /> + <Field name="name" component="input" data-testid="name" initialValue="test"/> + </form> + )} + </Form>, + ); + }); });