Skip to content

Commit

Permalink
[lib] Avoid regenerating holdersToRemove whenever Redux state changes
Browse files Browse the repository at this point in the history
Summary:
This diff addresses [ENG-9391: Maximum update depth exceeded](https://linear.app/comm/issue/ENG-9391/maximum-update-depth-exceeded).

The way this code was written, whenever the Redux state changed, `holdersToRemove` would be regenerated. This led to a React render loop.

Test Plan: Confirm that the React render cycle goes away

Reviewers: bartek, kamil, tomek, varun, will

Reviewed By: varun

Differential Revision: https://phab.comm.dev/D13465
  • Loading branch information
Ashoat committed Sep 25, 2024
1 parent 07fa6f5 commit 2fdcadd
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions lib/actions/holder-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,13 @@ function useClearAllHolders(): () => Promise<void> {
const identityContext = React.useContext(IdentityClientContext);
const getAuthMetadata = identityContext?.getAuthMetadata;

const holdersToRemove = useSelector(state =>
Object.entries(state.holderStore.storedHolders)
.filter(([, holderInfo]) => holderInfo.status !== 'PENDING_REMOVAL')
.map(([blobHash, { holder }]) => ({ blobHash, holder })),
const storedHolders = useSelector(state => state.holderStore.storedHolders);
const holdersToRemove = React.useMemo(
() =>
Object.entries(storedHolders)
.filter(([, holderInfo]) => holderInfo.status !== 'PENDING_REMOVAL')
.map(([blobHash, { holder }]) => ({ blobHash, holder })),
[storedHolders],
);

return React.useCallback(async () => {
Expand Down

0 comments on commit 2fdcadd

Please sign in to comment.