์๋ ํ์ธ์, ์ต๊ทผ์ ํ๋ก์ ํธ์์ ๋ฐ์ ์ฐฝ์ ์ฌ์ฉํฉ๋๋ค. ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ๋ชฉ๋ก ์์ฒด์์ ์์ ๋๋ฉด ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ง ๋ชฉ๋ก์ div/Tab์ผ๋ก ๋ํํ๋ฉด ๋ชฉ๋ก์ ์คํฌ๋กค ๋ง๋๋ฅผ ์จ๊ธฐ๊ณ ์์ div๊ฐ ๊ฐ์ ธ๊ฐ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ ์คํฌ๋กค ์ ์ด? ์ฝ๋์ ์ฃผ์ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<div ref={outerRef} style={{overflow:'auto',height:'200px'}} onScroll={scrollCheck}>
<Tab
defaultActiveKey='tab1'
onChange={(key)=>{ console.log("onChange====",key)}}
>
<Tab.TabPane tab="hot" tabKey="tab1" >
<FixedSizeList
className={'demo'}
height={200}
itemSize={40}
itemData={itemData}
width={300}
outerRef={outerRef}
/>
</Tab.TabPane>
<Tab.TabPane tab="newest" tabKey="tab2" >
<div style={{background: '#368AD9', color: '#fff', padding: '15px' }}>
2...
</div>
</Tab.TabPane>
</Tab>
</div>
๋ ๋๋ง ํจ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด์ ๋ ๊ฐ์ ์คํฌ๋กค ๋ง๋๊ฐ ์์ต๋๋ค.
๋ฐ์ ๊ฐ์ํ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ WindowScroller ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฝ๋๋ฅผ ์ดํด๋ณด๊ณ ๋ฐ์ ์ฐฝ์์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ ์ ์์ต๋๋ค. ๋ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ถ๋ชจ ์คํฌ๋กค ์์์ ์ถ๊ฐํ๊ณ overflow: hidden์ ๋ฐ์ ์ฐฝ ๋ชฉ๋ก์ ์ถ๊ฐํ ๋ค์ ๋ถ๋ชจ ์คํฌ๋กค ๋ฆฌ์ค๋์์ ๋ชฉ๋ก ์คํฌ๋กค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋ฐ์ ์ฐฝ์์ WindowScroller์ ๊ฐ์ ์๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค. ๋ถ๋ชจ์ ์คํฌ๋กค ๋ฆฌ์ค๋๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์๋ํ์ง๋ง ์๋ง์ผ๋ก ๋๋ฌ์ต๋๋ค.
๋๋ ๋๊ตฐ๊ฐ๊ฐ ๋ฐ์ ์ฐฝ๊ณผ ํจ๊ป ์๋ํ๊ณ ์ฝ๋ ์๋ ๋ฐ์ค ๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ๊ธฐ๊บผ์ด ๊ณต์ ํ๋ ค๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผํ๊ธฐ ์ํด ๋๋ถ๋ถ ์ฃผ์์ ๋ฌ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ์ ๊ฐ์ํ์์ WindowScroller ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
https://codesandbox.io/s/vy620pkzzy
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐ์ ์ฐฝ์์ WindowScroller์ ๊ฐ์ ์๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค. ๋ถ๋ชจ์ ์คํฌ๋กค ๋ฆฌ์ค๋๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์๋ํ์ง๋ง ์๋ง์ผ๋ก ๋๋ฌ์ต๋๋ค.
๋๋ ๋๊ตฐ๊ฐ๊ฐ ๋ฐ์ ์ฐฝ๊ณผ ํจ๊ป ์๋ํ๊ณ ์ฝ๋ ์๋ ๋ฐ์ค ๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ๊ธฐ๊บผ์ด ๊ณต์ ํ๋ ค๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผํ๊ธฐ ์ํด ๋๋ถ๋ถ ์ฃผ์์ ๋ฌ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.