瀏覽代碼

Avoid updating user when nothing changed

Tatiana Inama 4 年之前
父節點
當前提交
16c20e9ab0
共有 1 個文件被更改,包括 9 次插入7 次删除
  1. 9 7
      context/UserContext.tsx

+ 9 - 7
context/UserContext.tsx

@@ -15,6 +15,11 @@ export const UserContext = React.createContext<UserContextInterface>({
   updateUser: () => {},
 });
 
+const updateIfChanged = (user: User, newUser: Omit<User, "id">) =>
+  (Object.keys(newUser) as Array<keyof Omit<User, "id">>).some(
+    (key) => user[key] !== newUser[key]
+  );
+
 const UserContextProvider: FC = ({ children }) => {
   const [user, setUser] = useState<User>();
   const [isAuthenticated, setIsAuthenticated] = useState(false);
@@ -29,14 +34,11 @@ const UserContextProvider: FC = ({ children }) => {
     setUser(undefined);
   };
 
-  const updateUser = (newUserData: User) => {
-    if (user) {
+  const updateUser = ({ id, ...newData }: User) => {
+    if (user && updateIfChanged(user, newData)) {
       setUser({
-        ...newUserData,
-        id:
-          typeof newUserData.id === "string"
-            ? parseInt(newUserData.id)
-            : newUserData.id,
+        ...newData,
+        id: typeof id === "string" ? parseInt(id) : id,
       });
     }
   };