From 3222548bab9e6f63c615bc5ff3029c5e8eff2ecb Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 18 Feb 2021 19:05:03 +0100 Subject: [PATCH] prevent unnecessary re-renders when the state is already correct --- .../src/components/menu/menu.tsx | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/@headlessui-react/src/components/menu/menu.tsx b/packages/@headlessui-react/src/components/menu/menu.tsx index 3142160..25e8f7d 100644 --- a/packages/@headlessui-react/src/components/menu/menu.tsx +++ b/packages/@headlessui-react/src/components/menu/menu.tsx @@ -76,12 +76,14 @@ let reducers: { action: Extract ) => StateDefinition } = { - [ActionTypes.CloseMenu]: state => ({ - ...state, - activeItemIndex: null, - menuState: MenuStates.Closed, - }), - [ActionTypes.OpenMenu]: state => ({ ...state, menuState: MenuStates.Open }), + [ActionTypes.CloseMenu](state) { + if (state.menuState === MenuStates.Closed) return state + return { ...state, activeItemIndex: null, menuState: MenuStates.Closed } + }, + [ActionTypes.OpenMenu](state) { + if (state.menuState === MenuStates.Open) return state + return { ...state, menuState: MenuStates.Open } + }, [ActionTypes.GoToItem]: (state, action) => { let activeItemIndex = calculateActiveIndex(action, { resolveItems: () => state.items, @@ -103,7 +105,10 @@ let reducers: { if (match === -1 || match === state.activeItemIndex) return { ...state, searchQuery } return { ...state, searchQuery, activeItemIndex: match } }, - [ActionTypes.ClearSearch]: state => ({ ...state, searchQuery: '' }), + [ActionTypes.ClearSearch](state) { + if (state.searchQuery === '') return state + return { ...state, searchQuery: '' } + }, [ActionTypes.RegisterItem]: (state, action) => ({ ...state, items: [...state.items, { id: action.id, dataRef: action.dataRef }],