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>,
+    );
+  });
 });