์์ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ง ์ธ์์ ์ด๋ค์ ๐
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ windowscroller ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ด๋ ค ์๊ฑฐ๋ ์ฑ๋ฅ์์ ์ด์ ๋ก์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ ์ฑ์์ ์ฐ๋ฆฌ๋ ํ์ฌ ๋ฐ์ ๊ฐ์ํ๋ฅผ ์ฌ์ฉํ์ง๋ง ํญ์ ๋ ์ฑ๋ฅ์ด ์ข์ ๋์์ผ๋ก ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๊ฐ์ ์ฐพ์ ์ ์๋ค๋ฉด windowscroller ๊ธฐ๋ฅ ๊ตฌํ์ ๋์์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
WindowScroller
์ (๋) ๊ตฌ์ฑ ์์๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ ๊ฒ ์ค ํ๋์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ ์ฉ์ฑ์ ๋ณด์ง๋ง ๋ค๋ฅธ ๊ฒ์ ์ ์งํ๋ ๋ฐ ๊ด์ฌ์ด ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋์ ๊ฐ๋ฅํ๋ค๋ฉด ๋ฐ์ ์ฐฝ ์์์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ธ๋ถ ๊ตฌ์ฑ ์์๋ฅผ ๋น๋ํ๊ณ ๋ณ๋๋ก ๊ฒ์ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์ผ๋ง๋ ๋ณต์กํ ์ง์ ๋ฐ๋ผ ๊ทธ๋ฌํ ๊ตฌ์ฑ ์์๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ฐ์ ์ฐฝ์ ์ง์ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๋ณ๊ฒฝ์ ๊ธฐ๊บผ์ด ํ ์ ์์ต๋๋ค.
๋๊ตฐ๊ฐ (๊ทํ?)๊ฐ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ ์ถ๊ฐํ๋ PR์ ์ ์ถํ๋ ๊ฒ์ด ์ข์ ์ด๊ธฐ ์์์ผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ณ๋๋ก ๊ฒ์ํ๋ ๊ฒ์ด ์ผ๋ง๋ ๋ณต์กํ ์ง ์ ์ ์์ต๋๋ค.
์ฐฝ ์คํฌ๋กค๋ฌ๊ฐ ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ react-virtalized ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
WindowScroller
https://codesandbox.io/s/vy620pkzzy
๋์ ์ฝํ
์ธ ๊ฐ์๋ WindowScroller
https://codesandbox.io/s/xvl23p7okp
๋๋ ๊ทธ๊ฒ์ ๋ํด ์ด๋ค ์กฐ์น๋ ์ทจํ ๊ณํ์ด ์๊ธฐ ๋๋ฌธ์ ์ง๊ธ ๋น์ฅ์์ด ๋ฌธ์ ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฅ๊ธฐ ๊ณํ (์ ์ด๋ ๋ง์ ์์ผ๋ก๋)์ ์ด์จ๋ ๋ณ๋์ ๋ชจ๋์ด์์ต๋๋ค. ๊ทธ๋๋ ์ ์์๋ฅผ ์ดํด๋ณด๋ฉด ๊ธฐ์ฉ๋๋ค!
Hu @PascalSenn , ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์ ๊ฐ์ํ ๋ WindowScroller๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
์๋ ํ์ธ์ @PascalSenn , ๊ทธ๋ฆฌ๋๋ก ์ ๊ทผ ๋ฐฉ์์ ์๋ํ๊ณ ์์ง๋ง ์ ์๊ฒ ๋์ธ ์ ์๋?
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
์๋
ํ์ธ์.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Grid์ ๊ฒฝ์ฐ Lists ์ด์ธ์ ๋ค๋ฅธ ๋งค๊ฐ ๋ณ์ ์๋ช
์ ์ ๊ณตํด์ผ ํจ์ ์ค๋ช
ํ๋ ๋ฌธ์๋ฅผ ํด๋ฐฑํด์ผํฉ๋๋ค.
scrollTo({scrollLeft: number, scrollTop: number})
=> https://react-window.now.sh/#/api/FixedSizeGrid
์ด๊ฒ์ด ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค ...
์ฐธ๊ณ : @PascalSenn ์ CSS ํธ๋ฆญ์์ฃผ์
// This height will override the window.innerHeight set in JSX : height={window.innerHeight}
.window-scroller-override {
height: 100% !important;
}
๋์์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ๊ธฐ์ Grid ์์ ์ํ์ด ์์ต๋๋ค. https://codesandbox.io/s/wq301o8qz7
์ฐฝ ์คํฌ๋กค๋ฌ๊ฐ ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ react-virtalized ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
WindowScroller
https://codesandbox.io/s/vy620pkzzy๋์ ์ฝํ ์ธ ๊ฐ์๋ WindowScroller
https://codesandbox.io/s/xvl23p7okp
์ฐธ๊ณ ๋ก์ด ์์ ๋ฅผ ๊ณ ๋ คํ๋ ๋ชจ๋ ์ฌ๋์ window.innerWidth
๋ฐ window.innerHeight
์ ์ฌ์ฉ์ ์คํฌ๋กค๋ฐ์ ์กด์ฌ๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ / ์ฅ์น์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ์คํฌ๋กค๋ฐ ํฌ๊ธฐ (๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ํ์ํ๊ธฐ์ ์ถฉ๋ถํ ์ฝํ
์ธ ์ธ์ง ์ฌ๋ถ)๋ ๊ณต์ ๋์ด์ผํฉ๋๋ค.
@bvaughn , ๋กค๋ง ์๋๋ฅผ ์ ์ด ํ ์ ์์ต๋๊น? ๋๋ฌด ๋น ๋ฅธ ์ฌ๋ผ์ด๋ฉ๊ณผ ์์์์ด ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ค๋ฉด ๊ฐ์ ๋ชฉ๋ก์ด ๋งค์ฐ ํ์ํฉ๋๋ค.
@kgregory , ์ด๊ฒ์ด InfiniteLoader
์ด๋ป๊ฒ ์๋ํ๋์ง ์์ญ๋๊น? ์ ๊ณตํ๋ ์์์ WindowScroller
์ onScroll
๋ ์ธ๋ถ ๋ฒ์์์ ์์ฑ๋๊ณ List
์ ์ฉ๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ง๋ง InfiniteLoader
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ InfiniteLoader
๋ํ ์์ ์ฝ๋ฐฑ์ ์ธ์์์ ref
๋ฅผ ๊ฐ์ ธ์ _that_์ List
ํฉ๋๋ค. ๋ ์๊ตฌ ์ฌํญ์ ๋ํด ๋์ผํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ง๊ธ๊น์ง ์๋ํ ๋ชจ๋ ๊ฒ์ด ์๋ํ์ง ์์์ต๋๋ค.
@mrdanimal InfiniteLoader์์ ๊ฐ์ ธ์จ ์ฐธ์กฐ๋ก ๋ชฉ๋ก ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด์ด ๋ต๋ณ์ ์ฐธ์กฐํ์ญ์์ค. https://github.com/bvaughn/react-window/issues/417#issuecomment -583867845
@PascalSenn ์ ์ฝ๋ ์๋ ๋ฐ์ค์์ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ง๋ง ๊ฒฐ๊ตญ ๋ด ํ๋ก์ ํธ์ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ์ฌํญ์ ํ ์คํธํ๊ธฐ ์ํด ๋ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ๋๊ตฌ์๊ฒ๋ ์ ์ฉ ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ฌ๊ธฐ์ ๊ฒ์ํ๊ณ ์์ต๋๋ค.
FixedSizeList ์์ : https://codesandbox.io/s/react-window-with-windowscroller-fixedsizelist-xujgi
VariableSizeGrid ์์ : https://codesandbox.io/s/react-window-with-windowscroller-variablesizegrid-7kbwn
DynamicSizeList์์ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ตฌ๋ ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น? ๊ทธ๊ฒ์ ๋์๊ฒ ๋ง์ ๋ฌธ์ ๋ฅผ ๊ตฌํ ๊ฒ์ ๋๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฐฝ ์คํฌ๋กค๋ฌ๊ฐ ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ react-virtalized ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
WindowScroller
https://codesandbox.io/s/vy620pkzzy
๋์ ์ฝํ ์ธ ๊ฐ์๋ WindowScroller
https://codesandbox.io/s/xvl23p7okp