Skip to content

Commit d17c173

Browse files
anxLiangkimteayon
andauthored
fix(Bubble.List): change scroll observer of Bubble.List (#1690)
* fix(Bubble.List): change scroll observer of Bubble.List * fix(Bubble.List): improve robustness * test(Bubble): snapshot --------- Co-authored-by: Mickey <951203214@qq.com>
1 parent 20994e9 commit d17c173

File tree

9 files changed

+2636
-2534
lines changed

9 files changed

+2636
-2534
lines changed

packages/x/components/bubble/BubbleList.tsx

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ const BubbleList: React.ForwardRefRenderFunction<BubbleListRef, BubbleListProps>
139139

140140
// ============================= States =============================
141141
const [scrollBoxDom, setScrollBoxDom] = React.useState<HTMLDivElement | null>();
142-
const { scrollTo } = useCompatibleScroll(scrollBoxDom);
142+
const [scrollContentDom, setScrollContentDom] = React.useState<HTMLDivElement | null>();
143+
const { scrollTo } = useCompatibleScroll(scrollBoxDom, scrollContentDom);
143144

144145
// ============================ Prefix ============================
145146
const { getPrefixCls } = useXProviderContext();
@@ -191,8 +192,6 @@ const BubbleList: React.ForwardRefRenderFunction<BubbleListRef, BubbleListProps>
191192
};
192193
});
193194

194-
const renderData = autoScroll ? [...items].reverse() : items;
195-
196195
// ============================ Render ============================
197196
return (
198197
<div {...domProps} className={mergedClassNames} style={mergedStyle} ref={listRef}>
@@ -204,25 +203,31 @@ const BubbleList: React.ForwardRefRenderFunction<BubbleListRef, BubbleListProps>
204203
ref={(node) => setScrollBoxDom(node)}
205204
onScroll={onScroll}
206205
>
207-
{renderData.map((item) => {
208-
let mergedProps: BubbleItemType;
209-
if (item.role && role) {
210-
const cfg = role[item.role];
211-
mergedProps = { ...(roleCfgIsFunction(cfg) ? cfg(item) : cfg), ...item };
212-
} else {
213-
mergedProps = item;
214-
}
215-
return (
216-
<BubbleListItem
217-
classNames={classNames}
218-
styles={styles}
219-
{...omit(mergedProps, ['key'])}
220-
key={item.key}
221-
_key={item.key}
222-
bubblesRef={bubblesRef}
223-
/>
224-
);
225-
})}
206+
{/* 映射 scrollHeight 到 dom.height,以使用 ResizeObserver 来监听高度变化 */}
207+
<div
208+
ref={(node) => setScrollContentDom(node)}
209+
className={clsx(`${listPrefixCls}-scroll-content`)}
210+
>
211+
{items.map((item) => {
212+
let mergedProps: BubbleItemType;
213+
if (item.role && role) {
214+
const cfg = role[item.role];
215+
mergedProps = { ...(roleCfgIsFunction(cfg) ? cfg(item) : cfg), ...item };
216+
} else {
217+
mergedProps = item;
218+
}
219+
return (
220+
<BubbleListItem
221+
classNames={classNames}
222+
styles={styles}
223+
{...omit(mergedProps, ['key'])}
224+
key={item.key}
225+
_key={item.key}
226+
bubblesRef={bubblesRef}
227+
/>
228+
);
229+
})}
230+
</div>
226231
</div>
227232
</div>
228233
);

0 commit comments

Comments
 (0)