Skip to content

Commit 1e60c36

Browse files
committed
fix: Fix a race condition when handling multiple flag updates.
1 parent 28eab3e commit 1e60c36

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

src/provider.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class LDProvider extends Component<PropsWithChildren<ProviderConfig>, ProviderSt
4848
};
4949
}
5050
}
51+
this.setState(this.state);
5152
}
5253

5354
getReactOptions = () => ({ ...defaultReactOptions, ...this.props.reactOptions });
@@ -57,16 +58,19 @@ class LDProvider extends Component<PropsWithChildren<ProviderConfig>, ProviderSt
5758
ldClient.on('change', (changes: LDFlagChangeset) => {
5859
const reactOptions = this.getReactOptions();
5960
const updates = getFlattenedFlagsFromChangeset(changes, targetFlags);
60-
const unproxiedFlags = {
61-
...this.state.unproxiedFlags,
62-
...updates,
63-
};
61+
6462
if (Object.keys(updates).length > 0) {
65-
this.setState((prevState) => ({
66-
...prevState,
67-
unproxiedFlags,
68-
...getFlagsProxy(ldClient, unproxiedFlags, reactOptions, targetFlags),
69-
}));
63+
this.setState((prevState: ProviderState) => {
64+
const unproxiedFlags = {
65+
...prevState.unproxiedFlags,
66+
...updates,
67+
};
68+
return {
69+
...prevState,
70+
unproxiedFlags,
71+
...getFlagsProxy(ldClient, unproxiedFlags, reactOptions, targetFlags),
72+
}
73+
});
7074
}
7175
});
7276
};

0 commit comments

Comments
 (0)