Skip to content

Commit 148a647

Browse files
committed
perf: not render popup on init
1 parent 97eddcc commit 148a647

File tree

2 files changed

+56
-50
lines changed

2 files changed

+56
-50
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@rc-component/trigger",
3-
"version": "2.2.7",
3+
"version": "2.2.8",
44
"description": "base abstract trigger component for react",
55
"engines": {
66
"node": ">=8.x"

src/index.tsx

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,10 @@ export function generateTrigger(
644644
cloneProps.className = classNames(originChildProps.className, className);
645645
}
646646

647+
// ============================ Perf ============================
648+
const renderedRef = React.useRef(false);
649+
renderedRef.current ||= forceRender || mergedOpen || inMotion;
650+
647651
// =========================== Render ===========================
648652
const mergedChildrenProps = {
649653
...originChildProps,
@@ -702,55 +706,57 @@ export function generateTrigger(
702706
{triggerNode}
703707
</TriggerWrapper>
704708
</ResizeObserver>
705-
<TriggerContext.Provider value={context}>
706-
<Popup
707-
portal={PortalComponent}
708-
ref={setPopupRef}
709-
prefixCls={prefixCls}
710-
popup={popup}
711-
className={classNames(popupClassName, alignedClassName)}
712-
style={popupStyle}
713-
target={targetEle}
714-
onMouseEnter={onPopupMouseEnter}
715-
onMouseLeave={onPopupMouseLeave}
716-
// https://github.com/ant-design/ant-design/issues/43924
717-
onPointerEnter={onPopupMouseEnter}
718-
zIndex={zIndex}
719-
// Open
720-
open={mergedOpen}
721-
keepDom={inMotion}
722-
fresh={fresh}
723-
// Click
724-
onClick={onPopupClick}
725-
onPointerDownCapture={onPopupPointerDown}
726-
// Mask
727-
mask={mask}
728-
// Motion
729-
motion={mergePopupMotion}
730-
maskMotion={mergeMaskMotion}
731-
onVisibleChanged={onVisibleChanged}
732-
onPrepare={onPrepare}
733-
// Portal
734-
forceRender={forceRender}
735-
autoDestroy={mergedAutoDestroy}
736-
getPopupContainer={getPopupContainer}
737-
// Arrow
738-
align={alignInfo}
739-
arrow={innerArrow}
740-
arrowPos={arrowPos}
741-
// Align
742-
ready={ready}
743-
offsetX={offsetX}
744-
offsetY={offsetY}
745-
offsetR={offsetR}
746-
offsetB={offsetB}
747-
onAlign={triggerAlign}
748-
// Stretch
749-
stretch={stretch}
750-
targetWidth={targetWidth / scaleX}
751-
targetHeight={targetHeight / scaleY}
752-
/>
753-
</TriggerContext.Provider>
709+
{renderedRef.current && (
710+
<TriggerContext.Provider value={context}>
711+
<Popup
712+
portal={PortalComponent}
713+
ref={setPopupRef}
714+
prefixCls={prefixCls}
715+
popup={popup}
716+
className={classNames(popupClassName, alignedClassName)}
717+
style={popupStyle}
718+
target={targetEle}
719+
onMouseEnter={onPopupMouseEnter}
720+
onMouseLeave={onPopupMouseLeave}
721+
// https://github.com/ant-design/ant-design/issues/43924
722+
onPointerEnter={onPopupMouseEnter}
723+
zIndex={zIndex}
724+
// Open
725+
open={mergedOpen}
726+
keepDom={inMotion}
727+
fresh={fresh}
728+
// Click
729+
onClick={onPopupClick}
730+
onPointerDownCapture={onPopupPointerDown}
731+
// Mask
732+
mask={mask}
733+
// Motion
734+
motion={mergePopupMotion}
735+
maskMotion={mergeMaskMotion}
736+
onVisibleChanged={onVisibleChanged}
737+
onPrepare={onPrepare}
738+
// Portal
739+
forceRender={forceRender}
740+
autoDestroy={mergedAutoDestroy}
741+
getPopupContainer={getPopupContainer}
742+
// Arrow
743+
align={alignInfo}
744+
arrow={innerArrow}
745+
arrowPos={arrowPos}
746+
// Align
747+
ready={ready}
748+
offsetX={offsetX}
749+
offsetY={offsetY}
750+
offsetR={offsetR}
751+
offsetB={offsetB}
752+
onAlign={triggerAlign}
753+
// Stretch
754+
stretch={stretch}
755+
targetWidth={targetWidth / scaleX}
756+
targetHeight={targetHeight / scaleY}
757+
/>
758+
</TriggerContext.Provider>
759+
)}
754760
</>
755761
);
756762
});

0 commit comments

Comments
 (0)