From 50c6b8a8312076638f254dd4e6566632030a1d66 Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Wed, 22 Jan 2025 09:39:48 +0000 Subject: [PATCH] Avoid mutating the previous state in a set function (#22935) GitOrigin-RevId: b3613b8476bbb60a10ef6b293487b1017f56ea68 --- .../dictionary/components/dictionary-modal-content.tsx | 7 ++++--- .../project-list/context/project-list-context.tsx | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/services/web/frontend/js/features/dictionary/components/dictionary-modal-content.tsx b/services/web/frontend/js/features/dictionary/components/dictionary-modal-content.tsx index 90369d2467..a83308c98f 100644 --- a/services/web/frontend/js/features/dictionary/components/dictionary-modal-content.tsx +++ b/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 }) diff --git a/services/web/frontend/js/features/project-list/context/project-list-context.tsx b/services/web/frontend/js/features/project-list/context/project-list-context.tsx index 2c1e7941ec..918a54781d 100644 --- a/services/web/frontend/js/features/project-list/context/project-list-context.tsx +++ b/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]