Przeglądaj źródła

Avoid mutating the previous state in a set function (#22935)

GitOrigin-RevId: b3613b8476bbb60a10ef6b293487b1017f56ea68
Alf Eaton 1 rok temu
rodzic
commit
50c6b8a831

+ 4 - 3
services/web/frontend/js/features/dictionary/components/dictionary-modal-content.tsx

@@ -37,9 +37,10 @@ export default function DictionaryModalContent({
     word => {
       runAsync(postJSON('/spelling/unlearn', { body: { word } }))
         .then(() => {
-          setLearnedWords(value => {
-            value.delete(word)
-            return new Set(value)
+          setLearnedWords(prevLearnedWords => {
+            const learnedWords = new Set(prevLearnedWords)
+            learnedWords.delete(word)
+            return learnedWords
           })
           window.dispatchEvent(
             new CustomEvent('editor:remove-learned-word', { detail: word })

+ 6 - 4
services/web/frontend/js/features/project-list/context/project-list-context.tsx

@@ -271,7 +271,8 @@ export function ProjectListProvider({ children }: ProjectListProviderProps) {
 
   const toggleSelectedProject = useCallback(
     (projectId: string, selected?: boolean) => {
-      setSelectedProjectIds(selectedProjectIds => {
+      setSelectedProjectIds(prevSelectedProjectIds => {
+        const selectedProjectIds = new Set(prevSelectedProjectIds)
         if (selected === true) {
           selectedProjectIds.add(projectId)
         } else if (selected === false) {
@@ -281,7 +282,7 @@ export function ProjectListProvider({ children }: ProjectListProviderProps) {
         } else {
           selectedProjectIds.add(projectId)
         }
-        return new Set([...selectedProjectIds])
+        return selectedProjectIds
       })
     },
     []
@@ -293,7 +294,8 @@ export function ProjectListProvider({ children }: ProjectListProviderProps) {
 
   const selectOrUnselectAllProjects = useCallback(
     checked => {
-      setSelectedProjectIds(selectedProjectIds => {
+      setSelectedProjectIds(prevSelectedProjectIds => {
+        const selectedProjectIds = new Set(prevSelectedProjectIds)
         for (const project of visibleProjects) {
           if (checked) {
             selectedProjectIds.add(project.id)
@@ -301,7 +303,7 @@ export function ProjectListProvider({ children }: ProjectListProviderProps) {
             selectedProjectIds.delete(project.id)
           }
         }
-        return new Set([...selectedProjectIds])
+        return selectedProjectIds
       })
     },
     [visibleProjects]