@@ -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