Explorar o código

Adding dequal to make the score lookup not rerender unnecessarily

Kirk Trombley %!s(int64=5) %!d(string=hai) anos
pai
achega
fae107ff5e
Modificáronse 3 ficheiros con 12 adicións e 3 borrados
  1. 1 0
      client/package.json
  2. 6 3
      client/src/hooks/usePlayerScores.jsx
  3. 5 0
      client/yarn.lock

+ 1 - 0
client/package.json

@@ -4,6 +4,7 @@
   "private": true,
   "homepage": "https://kirkleon.ddns.net/terrassumptions/",
   "dependencies": {
+    "dequal": "^1.0.0",
     "pretty-ms": "^5.1.0",
     "react": "^16.12.0",
     "react-dom": "^16.12.0",

+ 6 - 3
client/src/hooks/usePlayerScores.jsx

@@ -1,4 +1,5 @@
 import { useState, useEffect } from 'react';
+import dequal from 'dequal';
 import { gameInfo } from '../domain/apiMethods';
 import { useGameId } from '../domain/gameStore';
 
@@ -10,8 +11,10 @@ export default () => {
     // define how to fetch scores
     const fetchInfo = async () => {
       const { players } = await gameInfo(gameId);
-      // TODO would be nice to only setScores on a change - maybe have back-end provide timestamp?
-      setScores(players);
+      // TODO  maybe have back-end provide timestamp? to avoid this check
+      if (!dequal(players, scores)) {
+        setScores(players);
+      }
     };
     // when the hook triggers, fetch the game info
     fetchInfo();
@@ -19,7 +22,7 @@ export default () => {
     const interval = setInterval(() => fetchInfo(), 5000);
     // and return a clean-up callback
     return () => { clearInterval(interval) };
-  }, [gameId]);
+  }, [gameId, scores]);
 
   return scores;
 }

+ 5 - 0
client/yarn.lock

@@ -3400,6 +3400,11 @@ depd@~1.1.2:
   resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
   integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
 
+dequal@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/dequal/-/dequal-1.0.0.tgz#41c6065e70de738541c82cdbedea5292277a017e"
+  integrity sha512-/Nd1EQbQbI9UbSHrMiKZjFLrXSnU328iQdZKPQf78XQI6C+gutkFUeoHpG5J08Ioa6HeRbRNFpSIclh1xyG0mw==
+
 des.js@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"