Skip to content

Commit 243bc84

Browse files
Clean up our hook dependency arrays
This change adds the `eslint-plugin-react-hooks` plugin to ensure that our hook dependency arrays stay up to date. Additionally, I went and cleaned up all our dependency arrays that were capturing state setters because it turns out you don't need to include those in your dependencies because they never change.
1 parent d4b734d commit 243bc84

10 files changed

+37
-17
lines changed

package-lock.json

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"eslint-plugin-import": "^2.28.0",
4646
"eslint-plugin-mozilla": "^3.1.0",
4747
"eslint-plugin-react": "^7.33.1",
48+
"eslint-plugin-react-hooks": "^5.2.0",
4849
"npm-run-all": "^4.1.5",
4950
"parcel": "^2.9.3",
5051
"prettier": "^3.0.0",

src/ui/.eslintrc.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module.exports = {
88
"plugin:import/typescript",
99
"plugin:react/recommended",
1010
"plugin:react/jsx-runtime",
11+
"plugin:react-hooks/recommended-legacy",
1112
],
1213
env: {
1314
es2023: true,
@@ -40,5 +41,6 @@ module.exports = {
4041
ignoreRestArgs: true,
4142
},
4243
],
44+
"react-hooks/exhaustive-deps": "error",
4345
},
4446
};

src/ui/components/DropdownMenu.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ const DropdownMenu: FC<DropdownMenuProps> = ({ onSelectFeatureConfigId }) => {
2525
})();
2626
}, [addToast]);
2727

28-
const handleChange = useCallback((event: ChangeEvent<HTMLSelectElement>) => {
29-
onSelectFeatureConfigId(event.target.value);
30-
}, []);
28+
const handleChange = useCallback(
29+
(event: ChangeEvent<HTMLSelectElement>) => {
30+
onSelectFeatureConfigId(event.target.value);
31+
},
32+
[onSelectFeatureConfigId],
33+
);
3134

3235
return (
3336
<Form.Group controlId="featureConfigSelect">

src/ui/components/ExperimentBrowserPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const ExperimentRow: FC<{ experiment: NimbusExperiment }> = ({
4848
(e: React.ChangeEvent<HTMLSelectElement>) => {
4949
setSelectedBranch(e.target.value);
5050
},
51-
[setSelectedBranch],
51+
[],
5252
);
5353

5454
const handleGenerateTestIds = useCallback(async () => {

src/ui/components/ExperimentStorePage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const ExperimentStorePage: FC = () => {
2727
variant: "danger",
2828
});
2929
}
30-
}, [experiments, addToast]);
30+
}, [addToast]);
3131

3232
useEffect(() => {
3333
void fetchExperiments();

src/ui/components/FeatureConfigPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,11 @@ const FeatureConfigPage: FC = () => {
8080
const handleModalConfirm = useCallback(async () => {
8181
setEnrollError(null);
8282
await handleEnrollClick(null, true);
83-
}, [handleEnrollClick, setEnrollError]);
83+
}, [handleEnrollClick]);
8484

8585
const handleModalClose = useCallback(() => {
8686
setEnrollError(null);
87-
}, [setEnrollError]);
87+
}, []);
8888

8989
return (
9090
<Container className="main-content p-2 overflow-hidden">

src/ui/components/JEXLDebuggerPage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ const JEXLDebuggerPage: FC = () => {
178178

179179
useEffect(() => {
180180
void fetchClientContext();
181-
}, []);
181+
}, [fetchClientContext]);
182182

183183
const handleExpressionChange = useCallback(
184184
(event: ChangeEvent<HTMLTextAreaElement>) => {
@@ -237,7 +237,7 @@ const JEXLDebuggerPage: FC = () => {
237237
}
238238
}
239239
}, 1000);
240-
}, [addToast, setModifiedContext]);
240+
}, [addToast]);
241241

242242
const handleContextChange = useCallback<OnChangeFn>(
243243
(key: string, value: FormDataValue, fieldType: FieldType) => {
@@ -276,7 +276,7 @@ const JEXLDebuggerPage: FC = () => {
276276
[key]: value,
277277
}));
278278
},
279-
[setModifiedContext, setFormData, parseAndSetContext],
279+
[parseAndSetContext],
280280
);
281281

282282
return (

src/ui/components/RecipeEnrollmentPage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const RecipeEnrollmentPage: FC = () => {
1616
(event: ChangeEvent<HTMLTextAreaElement>) => {
1717
setJsonInput(event.target.value);
1818
},
19-
[setJsonInput],
19+
[],
2020
);
2121

2222
const handleEnrollClick = useCallback(
@@ -63,17 +63,17 @@ const RecipeEnrollmentPage: FC = () => {
6363
});
6464
}
6565
},
66-
[jsonInput, setJsonInput, addToast, setEnrollError],
66+
[jsonInput, addToast],
6767
);
6868

6969
const handleModalConfirm = useCallback(async () => {
7070
setEnrollError(null);
7171
await handleEnrollClick(undefined, true);
72-
}, [handleEnrollClick, setEnrollError]);
72+
}, [handleEnrollClick]);
7373

7474
const handleModalClose = useCallback(() => {
7575
setEnrollError(null);
76-
}, [setEnrollError]);
76+
}, []);
7777

7878
return (
7979
<Container className="main-content m-0 p-2">

src/ui/components/SettingsPage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const SettingsPage: FC = () => {
5858
}
5959
}
6060
},
61-
[customCollection, collectionId, setCollectionId, addToast],
61+
[customCollection, addToast],
6262
);
6363

6464
const handleCustomChange = useCallback(
@@ -76,7 +76,7 @@ const SettingsPage: FC = () => {
7676
}
7777
}
7878
},
79-
[collectionId, customCollection, setCustomCollection, addToast],
79+
[collectionId, addToast],
8080
);
8181

8282
const handleForceSyncChange = useCallback(
@@ -96,7 +96,7 @@ const SettingsPage: FC = () => {
9696
variant: "danger",
9797
});
9898
}
99-
}, [forceSync, setForceSync, addToast]);
99+
}, [forceSync, addToast]);
100100

101101
return (
102102
<Container fluid className="main-content py-4 p-2 overflow-hidden">

0 commit comments

Comments
 (0)