File tree Expand file tree Collapse file tree 1 file changed +12
-1
lines changed Expand file tree Collapse file tree 1 file changed +12
-1
lines changed Original file line number Diff line number Diff line change @@ -156,6 +156,9 @@ export function generateTrigger(
156
156
157
157
triggerRef = React . createRef < React . ReactInstance > ( ) ;
158
158
159
+ // ensure `getContainer` will be called only once
160
+ portalContainer ?: HTMLElement ;
161
+
159
162
attachId ?: number ;
160
163
161
164
clickOutsideHandler : CommonEventHandler ;
@@ -858,10 +861,18 @@ export function generateTrigger(
858
861
let portal : React . ReactElement ;
859
862
// prevent unmounting after it's rendered
860
863
if ( popupVisible || this . popupRef . current || forceRender ) {
864
+ if ( ! this . portalContainer ) {
865
+ // In React.StrictMode component will call render multiple time in first mount.
866
+ // When you want to refactor with FC, useRef will also init multiple time and
867
+ // point to different useRef instance which will create multiple element
868
+ // (This multiple render will not trigger effect so you can not clean up this
869
+ // in effect). But this is safe with class component since it always point to same class instance.
870
+ this . portalContainer = this . getContainer ( ) ;
871
+ }
861
872
portal = (
862
873
< PortalComponent
863
874
key = "portal"
864
- getContainer = { this . getContainer }
875
+ getContainer = { ( ) => this . portalContainer }
865
876
didUpdate = { this . handlePortalUpdate }
866
877
>
867
878
{ this . getComponent ( ) }
You can’t perform that action at this time.
0 commit comments