Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 32778e8

Browse files
fix(hooks): Avoid setState in unmounted components. (#384)
1 parent a5ce0a2 commit 32778e8

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/Manager.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,24 @@ export type ManagerProps = {
1313
export function Manager({ children }: ManagerProps) {
1414
const [referenceNode, setReferenceNode] = React.useState<?Element>(null);
1515

16-
React.useEffect(
17-
() => () => {
18-
setReferenceNode(null);
19-
},
20-
[setReferenceNode]
21-
);
16+
const hasUnmounted = React.useRef(false);
17+
React.useEffect(() => {
18+
return () => {
19+
hasUnmounted.current = true;
20+
};
21+
}, []);
22+
23+
const handleSetReferenceNode = React.useCallback((node) => {
24+
if (!hasUnmounted.current) {
25+
setReferenceNode(node);
26+
}
27+
}, []);
2228

2329
return (
2430
<ManagerReferenceNodeContext.Provider value={referenceNode}>
25-
<ManagerReferenceNodeSetterContext.Provider value={setReferenceNode}>
31+
<ManagerReferenceNodeSetterContext.Provider
32+
value={handleSetReferenceNode}
33+
>
2634
{children}
2735
</ManagerReferenceNodeSetterContext.Provider>
2836
</ManagerReferenceNodeContext.Provider>

0 commit comments

Comments
 (0)