ããã¯ã react-window
ã®æ¬¡ã®ããŒãžã§ã³2.0ãªãªãŒã¹ã®èšç»ãå
±æããããã®å
æ¬çãªåé¡ã§ãã
ãã£ãŒãããã¯ã¯é«ãè©äŸ¡ãããèæ ®ãããŸãã ãã¹ãŠã®ãèŠæã«ãå¿ãã§ããªãå Žåã¯ããç解ã®ã»ã©ãããããé¡ãããããŸãã æ©èœãªã¯ãšã¹ããšãã³ãã«ãµã€ãºãã©ã³ã¿ã€ã ããã©ãŒãã³ã¹ãããã³ã¡ã³ããã³ã¹ã®æžå¿µãæ¯èŒæ€èšããããã«æåãå°œãããŸãã
ããŒãžã§ã³1ãã2ã«ã¢ããã°ã¬ãŒãããã«ã¯ãå€§å¹ ãªã³ãŒãå€æŽãå¿ èŠã«ãªãå¯èœæ§ãããããã®å€ãã¯ã³ãŒãmodã§èªååã§ããªããšæããŸãã ãã®ãããç¹ã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å Žåã匷ãçç±ããªãéãïŒããšãã°ãåçãµã€ãºã®ã³ã³ãã³ãã®ãµããŒããå¿ èŠãªå ŽåïŒãæ¢åã®ã³ãŒããã¢ããã°ã¬ãŒãããªãããšããå§ãããŸãã
ãŸããããŒãžã§ã³2ã«æŽæ°ãããšãã«ããã¥ã¡ã³ãã倱ãããªãããã«ãçŸåšã®ããã¥ã¡ã³ãããã¡ã€ã³react-window-v1.now.shã«åºå®ããŸãã
onScroll
ã³ãŒã«ããã¯ã¿ã€ãã³ã°ã®å€æŽè€éãã管çããã®ã«åœ¹ç«ã€1ã€ã®æ¹æ³ã¯ãã©ã€ãã©ãªããµããŒãããã³ã³ããŒãã³ãã®æ°ã
SimpleList
ïŒä»¥åã¯FixedSizeList
ïŒList
ïŒä»¥åã¯DynamicSizeList
ïŒResizeObserver
APIïŒãŸãã¯ããªãã£ã«ïŒãå¿
èŠã§ããGrid
ïŒä»¥åã¯VariableSizeGrid
ïŒreact-virtualized
ããreact-window
react-virtualized
ãžã®äž»ãªå€æŽã®1ã€ã¯ã children
ãã¬ã³ããªã³ã°å°éå
·ïŒäŸïŒ children(props)
ïŒã§ã¯ãªãReactèŠçŽ ïŒäŸïŒ React.createElement(children, props))
ïŒãšããŠæ±ããšãã決å®children(props)
ïŒã
ãããè¡ãåæ©ã¯ããã€ããããŸããã
React.memo
ã useMemo
ã shouldComponentUpdate
ïŒãæäŸãããããã¢ã€ãã ã¬ã³ãã©ãŒã«ç¬èªã®ãã£ãã·ã¥æœè±¡åãå®è£
ããå¿
èŠã¯ãããŸããã§ãããcloneElement
åŒã³åºããå¿
èŠãšããã«ïŒã react-window
ã«ãã£ãŠç®¡çã§ããŸããæ®å¿µãªãããããã€ãã®æ¬ ç¹ããããŸããã
itemData
ãã«ã¹ã¿ã areEqual
æ¯èŒãšã¯ã¹ããŒããªã©ã®APIãå¿
èŠã«äžèšã®é·æãšçæãèæ
®ããåŸã react-window
ã¬ã³ããªã³ã°å°éå
·ã¢ãããŒãã«å€æããããšã«ããŸããã ããã¯ããã®ãããªè€éãªäŸãããç°¡åã«æžãçŽãããšãã§ããããšãæå³ããŸãã
const Example = ({ height, items, toggleItemActive, width }) => (
<List
height={height}
itemCount={items.length}
itemRenderer={({ index, key, style }) => {
const item = items[index];
return (
<div key={key} onClick={() => toggleItemActive(index)} style={style}>
{item.label} is {item.isActive ? "active" : "inactive"}
</div>
);
}}
itemSize={35}
width={width}
/>
);
以åã¯ããªã¹ãã³ã³ããŒãã³ãã¯æ°Žå¹³ã¬ã€ã¢ãŠãã¢ãŒããšåçŽã¬ã€ã¢ãŠãã¢ãŒãã®äž¡æ¹ããµããŒãããŠããŸããã å®è£
ãšã¡ã³ããã³ã¹ãç°¡çŽ åããããã«ããããŠå§åçã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ã¯åçŽãªã¹ãã§ããããã layout="horizontal"
ãµããŒããåé€ããŸãã
ã°ãªããã³ã³ããŒãã³ãã¯åŒãç¶ãdirection="RTL"
ããµããŒãããŸããããªã¹ãã¯ãµããŒãããŸããïŒåçŽã¬ã€ã¢ãŠãã®ã¿ããµããŒãããããïŒã ãã®ãã¬ãŒããªãã¯ããªã¹ããããå°ãããä¿å®ããããããããã«è¡ãããŠããŸãã
onItemsRendered
ããã³onScroll
ã³ãŒã«ããã¯ã®å€æŽãªã¹ãããã³ã°ãªããã³ã³ããŒãã³ãã¯çŸåšã onItemsRendered
ããã³onScroll
ã³ãŒã«ããã¯å°éå
·ããµããŒãããŠããŸãã ãããã®ã³ãŒã«ããã¯ã¯ãã³ããããã§ãŒãºäžïŒãªã¹ããŸãã¯ã°ãªãããã¬ã³ããªã³ã°ãå®äºããåŸïŒã«åŒã³åºãããŸãã ããã¯ããããã®ã³ãŒã«ããã¯ã«å¿çããŠå¯äœçšïŒåæãã°ãªã©ïŒãå®è¡ããããšãåžžã«å®å
šã§ãããšããç¹ã§äŸ¿å©ã§ãããæ¬ ç¹ããããŸããã¹ã¯ããŒã«åææŽæ°ã¯ã2çªç®ã®ïŒãã«ã¹ã±ãŒããïŒã¬ã³ããªã³ã°ã§å®è¡ããå¿
èŠããããŸãã ã
ããŒãžã§ã³2ã¯ãããã«å¯ŸåŠããããã«onScroll
ã³ãŒã«ããã¯ã«å€æŽãå ããŸãã onScroll
ã³ãŒã«ããã¯ã¯ãã€ãã³ãã®ãã£ã¹ããããµã€ã¯ã«äžã«åŒã³åºããããããæŽæ°ã¯ãªã¹ããŸãã¯ã°ãªããèªäœã®æŽæ°ãšïŒReactã«ãã£ãŠïŒãããåŠçãããŸãã
onItemsRendered
ã³ãŒã«ããã¯ã¯ãã³ããããµã€ã¯ã«äžãåŒãç¶ãåŒã³åºãã眮ãæããããŸãã ãã®å€æŽã¯ããªã¹ãã³ã³ããŒãã³ããã¢ã€ãã«åªå
床ã§äºåã¬ã³ããªã³ã°ããããšã«ãããã¬ã³ããªã³ã°ããã©ãŒãã³ã¹ãããç©æ¥µçã«æé©åãã衚瀺ããã¯ãªã©ã®å®éšçãªAPIãå©çšã§ããããã«ããããã«è¡ãããŸãã
åé€ãããããã€ãã®ä¿çäžã®éæšå¥šïŒDEVèŠåä»ãïŒããããŸãã
innerTagName
ããã³outerTagName
ã ïŒä»£ããã«innerElementType
ãšouterElementType
䜿çšããŠãã ãããïŒoverscanCount
ã overscanColumnsCount
ãããã³overscanRowsCount
ã ïŒä»£ããã«overscanColumnCount
ãšoverscanRowCount
䜿çšããŠãã ãããïŒoverscanCount
ã¯ãªã¹ãã³ã³ããŒãã³ãããåé€ãããåçãªãªãŒããŒã¹ãã£ã³ã¢ãããŒããæ¡çšãããŸããdirection
ãæ°Žå¹³ãå€ãšãåçŽãå€ã ïŒãããã¯layout
ã«ç§»åãããŸããããããŒãžã§ã³2ã§ã¯å®å
šã«åé€ãããŸããïŒitemData
ããããïŒããã³ã¢ã€ãã ã¬ã³ãã©ãŒã«æž¡ããã察å¿ããdata
ããããïŒã¯ãã¬ã³ããŒããããAPIãžã®å€æŽã«ãããããäžèŠã«ãªã£ããããåé€ãããŸããuseIsScrolling
ããããïŒããã³ã¢ã€ãã ã¬ã³ãã©ãŒã«æž¡ããã察å¿ããisScrolling
ããããïŒã¯åé€ãããŸããããã¯ãäºåã¬ã³ããªã³ã°ãšè¡šç€ºããã¯ã®å€æŽã«ãããå®è£
ã«è²»çšããããããã§ããäžèšã®éæšå¥šã®å°éå ·ã®ããã€ãã¯ãä»ã®èšç»ãããå€æŽãèãããšãŸã é¢é£æ§ããªããããããªãããšã«æ³šæããŠãã ããããããç§ã¯å®å šãæãããã«ãšã«ããããããããã«ãªã¹ãããŸãã
ç§ãã¡ã®å Žåãæ°Žå¹³ãªã¹ãã¯ã¢ãã€ã«ã§åºã䜿çšãããŠããŸãã ã³ã³ãããŒã«ã®ãããªç¡éã«ã¹ã¯ããŒã«å¯èœãªã«ã«ãŒã»ã«ã«ã䜿çšããŠããŸãã IMOã¯ã¢ãã€ã«äžã«ããå¿ èŠããããŸãã
ãŠãŒã¹ã±ãŒã¹@istarkovãå ±æããŠããã ãããããšãããããŸãã æ°Žå¹³ãŠã£ã³ããŠã®æå¹ãªäœ¿çšäŸããªããšæãããã§ã¯ãããŸããã ç§ã¯ããããã¯ããã«äžè¬çã§ã¯ãªããšæããŸãã ïŒã«ã«ãŒã»ã«ã®å Žåã§ããå€ãã®å Žåããã¹ã¯ããŒã«ãã€ãã³ãããŒã¹ã®ãŠã£ã³ããŠåŠçãå¿ èŠãšããªãå·Š/å³ç¢å°ããã²ãŒã·ã§ã³ã䜿çšããŸããïŒäžéšãçžæ®ºããããã«v2ã®ãµããŒããåé€ããæ¹ãïŒç§ã«ãšã£ãŠã¯ïŒããè¯ãã«ãŒããããããªããšæããŸããäºåã¬ã³ããªã³ã°ãåçãµã€ãžã³ã°ãªã©ã§å°å ¥ããããšãèšç»ããŠããè€éãã®
ç§ã¯ããã®ããã¹ãªã ãªã¢ãããŒãã«æ¬åœã«è奮ããŠããŸããããã«ãããããã·ã³ãã«ã§ãããã©ãŒãã³ã¹ãé«ããããã·ã³ãã«ãªã³ãŒãã«ã€ãªããããšãé¡ã£ãŠããŸãã
ãããã ããããå¯å€ãµã€ãºã®ãªã¹ããåé€ããããšã«ã€ããŠã¯ã»ãšãã©å¿é
ããŠããŸããã å¯å€ãµã€ãºã®ãªã¹ããDynamicListã«çœ®ãæããããšãèšç»ããŠããŸãããã¢ã€ãã ã«ã¹ã¯ããŒã«ã§ããªãåçãªã¹ãã®åé¡ã¯ãäžéšã®ã³ã³ããŒãã³ãã«ãšã£ãŠéåžžã«äŸ¿å©ãªæ©èœã§ããããã®ãããªèŠä»¶ãæéã®çµéãšãšãã«çºçããå¯èœæ§ããããããäºæž¬ã§ããŸããã react-windowã¯ããªãã®ããŒãºã«åããŸãã
ç§ãèŠã2çªç®ã®åé¡ã¯ãåçãªã¹ãã®ããã©ãŒãã³ã¹ã§ããå¯å€ãµã€ãºã®ãªã¹ããšåãããã©ãŒãã³ã¹ãåçãªã¹ãã«æäŸã§ããå Žåã¯ãscrollToItemããµããŒãããŠããªããŠãããããããŠãããŸããŸããããããã§ãªãå Žåã¯ãéçºè
ãããã¯ã€ã³ãããå¯èœæ§ããããŸããåçãªã¹ããé
ããã¢ã€ãã ãžã®ã¹ã¯ããŒã«ããµããŒããããŠããªããšããå¥åŠãªç¶æ³ã§ã¯ããªã¹ãã«ã¯åºå®ã¢ã€ãã ã®é«ããããããŸããã
å¯å€ãµã€ãºã®ãªã¹ããDynamicListã«çœ®ãæããããšãèšç»ããŠããŸãããã¢ã€ãã ãŸã§ã¹ã¯ããŒã«ã§ããªãåçãªã¹ãã®åé¡
ããã¯åºæã®å¶éã§ã¯ãªããçŸåšã®å®è£ ã®1ã€ã«ãããªããšæããŸãã ãã®æ©èœãã©ã®ããã«æäŸã§ãããã«ã€ããŠã®ã¢ã€ãã¢ããããŸãã åãçµãæéãèŠã€ãããã©ããã¯å¥ã®è³ªåã§ãïŒsmileïŒ
ç§ãèŠã2çªç®ã®åé¡ã¯ãåçãªã¹ãã®ããã©ãŒãã³ã¹ã§ããå¯å€ãµã€ãºã®ãªã¹ããšåãããã©ãŒãã³ã¹ãåçãªã¹ãã«æäŸã§ããå Žåã¯ãscrollToItemããµããŒãããŠããªããŠãããããããŠãããŸããŸããããããã§ãªãå Žåã¯ãéçºè ãããã¯ã€ã³ãããå¯èœæ§ããããŸããåçãªã¹ããé ããã¢ã€ãã ãžã®ã¹ã¯ããŒã«ããµããŒããããŠããªããšããå¥åŠãªç¶æ³ã§ã¯ããªã¹ãã«ã¯åºå®ã¢ã€ãã ã®é«ããããããŸããã
ãããåæ§ã«æ©èœãããã©ãããèšãã®ã¯é£ããã§ãã åçãªã¹ãã¯ããå€ãã®äœæ¥ãè¡ãå¿ èŠãããããã«æããããããããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã å€åéãã¯éèŠãããããŸããããããã§ã¯ãªããããããŸããã çŸåšãµããŒãããŠããªããã®ããµããŒãã§ããããã«ãããã®ã§ãæ°ããæ©èœãè¿œå ããã«ã¯ã¹ã³ãŒããçž®å°ããå¿ èŠããããšæããŸãã ãã ããçŸåšå€æ°ãªã¹ãã«æºè¶³ããŠããå Žåã¯ãv2ã«ã¢ããã°ã¬ãŒãããçç±ã¯ãããŸããïŒå°ãªããšãè¿ããã¡ã«ïŒã
@bvaughnããã¯ç§ã«ã¯ããã¥ã¡ã³ãã®ããã«èŠããŸãïŒ
å»å¹Žã®å€ããããã«åãçµãã§ããŸããïŒ ;-)
ãã£ãšæ·±å»ãªããšã«ãç§ã¯ãã¡ã³ã§ã¯ãããŸããããã¬ã³ããªã³ã°å°éå ·ã¯ãã®ã³ã³ããã¹ãã§ã¯çã«ããªã£ãŠãããšæããŸãã
ããããä»ææžããŸããðç²ããŸããã
ç§ã¯ãã¡ã³ã§ã¯ãããŸããããã¬ã³ããªã³ã°å°éå ·ã¯ãã®ã³ã³ããã¹ãã§ã¯æå³ããããšæããŸãã
ãã¡ã³ã§ã¯ãªãçç±ã詳ãã説æããŠããã ããŸããïŒ
æ°Žå¹³ãªã¹ã/ã°ãªããã®ãµããŒãã¯ã AutoSizer
ïŒreact-virtualized-auto-sizerïŒã®ãããªãªããã€ã³æ©èœãšããŠæå³ããããŸããïŒ
æ°Žå¹³ãªã¹ãã«ã¯react-virtualizedãšreact-windowã®äž¡æ¹ã䜿çšããŸããããreact-windowAPIã®æ¹ãã¯ããã«ç°¡åã§ãã ç§ã¯ãããåçŽãªAPIãæåŸ ããŠãéæšå¥šã®å¿ èŠæ§ãç解ããŠããŸãã
ã°ãªããã®ãµããŒãã¯ãŸã èšç»ãããŠããŸãã æ°Žå¹³æ¹åã®ãµããŒãããªããã€ã³ããŸããå®éã«ã¯ããã§ã¯ãããŸããã ããã¯æå³ããªããšæããŸãã
@bvaughnç§ã¯äžè¬çã«ã¬ã³ããªã³ã°å°éå ·ã楜ããã§ããããããã¯ããªããæŠèª¬ããåé¡ã解決ããŸãããç§ã¯ãããããã¹ããããããžãã¯ã®æãå«ããããããªããå«ãŸãªããããããªãã€ã³ã©ã€ã³é¢æ°ã奚å±ãããšæããŸãã ð€ããã§ã®é害ã¯ãŠãŒã¶ãŒã«ãããŸãã ð
çµç©é ã°ãªãããå®çŸã§ããŸããïŒ
@nikitapilgrimãããã react-virtualized
ã®Masonry
ã³ã³ããŒãã³ãã䜿çšããããšããå§ãããŸã
https://github.com/bvaughn/react-virtualized/blob/master/docs/Masonry.md
æè¬ããŸãããreact-virtualizedã§ã®ã¿æ©èœããŸããïŒ
@nikitapilgrimããã ð
React-virtualizedã¯ãreact-windowããµããŒãããŠããªãå€ãã®æ©èœããµããŒãããŠããŸãã
ããã±ãŒãžãããå°ãããããéãããããšã«çŠç¹ãåœãŠãããã«ãreact-windowã®ç¯å²ã¯å€§å¹ ã«çž®å°ãããŠããŸãã ð
react-virtualizedã®æ©èœãå¿ èŠãªå Žåã¯ãããã«åºå·ããããšããå§ãããŸã-ããã§ãçŽ æŽãããã©ã€ãã©ãªã§ãïŒ
ãã®react-virtualized
babel 7
åé¡ã®è§£æ±ºçãæ¢ããŠããã®ã§ã react-window
ã«åºããããŸããã react-virtualized
Masonry
ã³ã³ããŒãã³ãã䜿çšããŠããŸããã babel
ã¢ããã°ã¬ãŒãããåŸã¯äœ¿çšã§ããªããªããŸããã
ããã¯ãreact-virtualizedã®åé¡ãå ±åããå Žæã§ã¯ãããŸããã
@bvaughnã«åæããŸããã ããããèªåèªèº«ãš@babangsundã¯ãã®äž@nikitapilgrimããçãMasonry
ã³ã³ããŒãã³ãã®æå¿ãã§å°å
¥ãããŠããªãreact-window
ã代ããã«äœ¿çšããreact-virtualized
ã ãã ãããŠãŒã¶ãŒãææ°ã®[email protected]
ãš[email protected]
ïŒ create-react-app
ïŒã react-virtualized
ã¯å¿
ãããæ©èœãããšã¯éããŸããã
åããããã®ç©Žãäžã人ã«ãšã£ãŠã¯ãããã圹ç«ã€æ
å ±ã ãšæããŸãã
¯\ _ïŒãïŒ_ /¯
ããŒãžã§ã³2ãããŠã³ããŒãã§ããåçãµã€ãºãªã¹ãã䜿çšãããã®ã§ãããreact virtualiseã䜿çšããå¿
èŠããããŸããïŒ
ããã¯ç§ã®ãªã¹ããå¯å€ãµã€ãºã®ãªã¹ãã§ã©ã®ããã«èŠãããã§ã
ããã¯äžè¬çãªãµããŒãã®åé¡ã§ã¯ãããŸããã ãããã¯ã«ã€ããŠã³ã¡ã³ããæ®ããŠãã ããã
ãã£ãŒãããã¯ãããã ããã°å¹žãã§ã
ç§ã¯ãã¬ãã®ãããªè£œåã«react-window
ããŠããŸãããããã«ããã€ãã®èãããããŸãã
å°éå ·ãã¬ã³ããªã³ã°ãã
ããã¯ãåçŽã§ãããåè¿°ã®æ¬ ç¹ãåé¿ãããããè¯ãå€æŽã®ããã«æãããŸãã ãŸããAPIã¯react-nativeã®FlatListã«äŒŒãŠããŸãã https://github.com/bvaughn/react-window/issues/85ã§ãã£ã¹ã«ãã·ã§ã³ãèªãã ããšãèŠããŠã
ã³ã³ããŒãã³ããå°ãªã
æ°Žå¹³ãªã¹ãã®ãµããŒãã¯ãªããªããŸãã
horizontal
ãµããŒããšVariableSizeList
ã®åé€ã«åŒ·ãå察ããŸãã ãæ³åã®ãšããããããã¯ç§ã䜿çšããäž»ãª2ã€ã§ãã ãããã®å®è£
ã¯æ¬åœã«ç¶æããã«ã¯è² æ
ã倧ããããŸããïŒ ããã§ãªãå Žåã¯ãåèããŠä¿ç®¡ããŠããã ããã°å¹žãã§ãã
ãã®ä»ã®å€æŽã«ã€ããŠã¯ã匷ãæèŠã¯ãããŸããã overscanCount
åé€ã¯å°ãå¿é
ã§ãããã«ã¹ã¿ã å€ãå¿
èŠãªãŠãŒã¹ã±ãŒã¹ã«ã¯ãŸã çŽé¢ããŠããªãã®ã§ãããããåé¡ãããŸããã
ãã@bvaughnïŒ ãã®ããã±ãŒãžãããããšãïŒ ä»äºäžã®ãããžã§ã¯ãã«ããŒãžã§ã³2ãçµã¿èŸŒãããšãæ€èšããŠããŸãã ããããã€ãªãªãŒã¹ããããã«ã€ããŠãããªãã¯çå Žãæã£ãŠããŸããïŒ
ãã®ã©ã€ãã©ãªã«æè¬ããå°æ¥ã®ãªãªãŒã¹ã®èšç»ãå ±æããããšã¯ãæè¡çè² åµã軜æžããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã
æè¿ã®react-window
以éã®ããŒãžã§ã³2ã䜿çšããŠWindowScroller
åäœãè¡ããç°¡åãªãæ¹æ³ã¯ãããŸããïŒ
ãããäžå¯èœãªå Žåãããã¯ãã®ããŒãžã§ã³2ã®å¢çå€ã«ãªããŸããïŒ ãŸãã¯ããã¯åŸã§è¿œå ã§ããŸããïŒ
ç§ã®ã³ã³ããã¹ãã§ã¯ãã¬ã€ã¢ãŠãã«ããã¿ãŒãå«ãŸããŠããã DynamicSizeList
ãããªææ°ã®ã¢ãããŒãã䜿çšãããšã2çªç®ã®ã¹ã¯ããŒã«ããŒïŒ1ã€ã¯ããŒãžçšããã1ã€ã¯è£œåãªã¹ãçšïŒãå°å
¥ãããŸãã
çŽ æŽãããããã±ãŒãžã ããã©ã«ãã§åçãªé«ããªã¹ããç±å¿ã«åŸ ã£ãŠããŸã-çŸæç¹ã§ã¯ãã¬ã³ããªã³ã°ãããè¡ã®é«ãã芪ãªã¹ãã«æ»ãããã®ã«ã¹ã¿ã ããžãã¯ãããããäœæããŸããã ããŸãããã°ããã®æ°ããããŒãžã§ã³ã§ç§ã¯ãã®ããžãã¯ãåé€ããããšãã§ããŸãã ããã«åãçµãã§ãããŠããããšãïŒ
@ltkn @mrdanimal
ãŠã£ã³ããŠã¹ã¯ããŒã©ãŒã䜿çšããæ¹æ³ã¯ãã§ã«ãããŸãã
https://github.com/bvaughn/react-window/issues/30#issuecomment -428868071
å·ŠãŸãã¯å³ã®äž¡æ¹åã«ç¡éã«ã¹ã¯ããŒã«ããæ¹æ³!!!
æã
ãæã£ãŠããå Žåã¯WindowScroller
ããã«ã¯äŸåããreact-virtualized
çŽ æŽããããã®ã§ãã react-window
èåŸã«ããç®æšã«ããã react-virtualized
ãšæ¯èŒããŠã¯ããã«å¹ççã§ã³ãŒããå°ãªããªã£ãããã react-virtualized
ããWindowScroller
ã䜿çšããããããŸããã 代ããã«ã react-virtualized-auto-sizer
ãããªå¥ã®ããã±ãŒãžãæ¢ããŸãã
åãã£ãŠæè¬ããŸãã
@prabusamvel hm ..
å¥ã®ããã±ãŒãžã®å©ç¹ã¯äœã§ããïŒ
æ°ããDynamicSizeListã§éãã§ããŸãã ãšãŠããã£ãããïŒ æ¹åã¿ã€ãã«ãttbããšãbttãïŒäžããäžãäžããäžïŒãå«ããããšã§ã倧ããªæ©èœåŒ·åãã§ãããšæããŸãã çŸåšãäžã«ã¹ã¯ããŒã«ãããªã¹ããå®è£ ããã¯ãªãŒã³ãªæ¹æ³ã¯ãããŸããããä»ã®ãã¹ãŠã®æ¹åããµããŒããããŠããŸãã
@toddmacintyreãã®ããŒãžã§ã³2ãèŠã€ãããŸããã
@muhammedmagdi npm install react-window@next
ããŒãžã§ã³2ãããã®ä»æ§ã§å¿ èŠãªDOMæ§é ããµããŒãã§ããã°çŽ æŽãããã§ããã-httpsïŒ //www.w3.org/TR/wai-aria-1.1/#gridïŒ217ã¯ãŸã ç§ãã¡ã«ãšã£ãŠåé¡ã§ãã ç§ãç¥ãéããããŒãžã§ã³2ã®ææ¡ã¯ä»ã®ãšããããã§ã¯ãããŸããã
@mjurkowski @bvaughn yarn add react-window@next
ã¯1.6.0-alpha.1
ã€ã³ã¹ããŒã«ããŸãã ãŸããåçãªã¹ããµã³ãããã¯ã¹ã®äŸhttps://react-window-next.now.sh/#/examples/list/dynamic -sizeãå®è¡ããããšãããšã Error importing GitHub repository: Could not find package.json
ã¹ããŒãããŸãã
ã°ãªããã§ãindex
ãæž¡ãã®ã¯ã©ãã§ããïŒ:)
ã¢ããªã±ãŒã·ã§ã³ã®äžéšã«ã¯ãå¯å€å¹ ã®åããããŒãæã€ã°ãªãããå¿ èŠã§ãã ã°ãªãããšçµã¿åãããæ°Žå¹³å¯å€ãµã€ãºã®ãªã¹ãã䜿çšãã2ã€ã®ã¹ã¯ããŒã«ãåæããããšã§ããããå®çŸããŸããã
æ°Žå¹³ãªã¹ããåé€ãããšããã®UIãäœæã§ããªããªããŸãïŒãŸãã¯ãå°ãªããšããåããããŒã°ãªããã«1è¡ãã2ã€ã®ã°ãªããã䜿çšããããã«UIãæžãçŽãå¿ èŠããããŸãã
次ã®è£œåã¯ãããã§ããã ããããç§ã¯æ°Žå¹³ãšåçŽã®äž¡æ¹ãå¿ èŠãªã®ã§ãåèãŸã§ã«ç§ã¯èªåã§äœæããŸããïŒ https ïŒ
ãã£ãŒãããã¯ãæè¿ããŸãã
ã¹ãã£ãããŒãªèŠçŽ ããµããŒãããããšã¯ãreact-windowãžã®çŽ æŽãããè¿œå ã«ãªããšæããŸãã ããã¯ããªãäžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ããããªã¹ããšã°ãªããã®äž¡æ¹ã«å®è£ ããã®ã¯ç°¡åã§ãã
APIã¯æ¬¡ã®ããã«ãªããŸãã
<Grid
// First 2 columns are sticky
stickyLeft={2}
// Last column is not sticky (default value)
stickyRight={0}
// First and last rows are sticky
stickyTop={1}
stickyBottom={1}
/>
ç²çæ§ãæ©èœãããããã®2ã€ã®éèŠãªèŠçŽ ã¯æ¬¡ã®ãšããã§ãã
position: sticky
代ããã«absolute
ã䜿çšããç²çæ§ã®ãªã軞ã«ã¯left
ãštop
代ããã«left
margin-x
ã䜿çšããŸããã®ãããªåªããæ©èœã®ã³ã¹ãã¯åŠ¥åœãªããã§ãã
position: sticky
ãµããŒãããŠããªããã®ã¯éåžžã®ããŒãžã§ã³ãèŠãã ãã§ããã®ãŠãŒã¹ã±ãŒã¹ãå ·äœçãããŠãã®ãŸãŸãµããŒãã§ããªããšæãããå Žåã¯ããã€ã³ã1ã®ã¿ããµããŒãããããšããå§ãããŸããã»ã«ãã¬ã³ããªã³ã°ãããã©ãããæå®ã§ãããšãã¹ãã£ãããã¹ãç°¡åã«å®è£ ã§ããŸãã
å¿ èŠã«å¿ããŠåãã§ãæäŒããããŠããã ããŸãã
ãµã€ãºã®èªå枬å®ãšæŽæ°ã¯ãµããŒãããŠããŸããã
ããã¯ããªã倧ããªãã€ãã¹é¢ã ãšæããŸãã ç§ãäœæããã»ãŒãã¹ãŠã®ã°ãªããã«ã¯ã3ã€ãŸãã¯4ã€ã®åºå®å¹ ã®åïŒã¹ããŒã¿ã¹ã©ãã«ãäžéšã®ã¡ã¿ããŒã¿ãã¢ã¯ã·ã§ã³ã®åŒã³åºããªã©ïŒãšãæ®ãã®äœ¿çšå¯èœãªã¹ããŒã¹ãå ãã1ã€ã®åçå¹ ã®åãå¿ èŠã§ãã
ããµããŒããããŠããªãããšã¯ãAutosizerã®ãããªè¿œå ã®ã³ãŒããã³ã³ããŒãã³ããè¿œå ããŠããå¿ ããããããäžå¯èœã§ããããšãæå³ããããã§ã¯ãããŸããããããã®ãŠãŒã¹ã±ãŒã¹ãååã«æ€èšããåçãªåã§ãããåå¿ããããããŸãã-ããããããããã¹ãŠã®è·ç©ã®ããã«ä»®æ³åãããŠããŸãã
åçãªåãå¿ èŠãªå Žåã¯ããããã®ãŠãŒã¹ã±ãŒã¹ãååã«æ€èšãããœãªã¥ãŒã·ã§ã³ãææžåããŠãããšäŸ¿å©ã§ãã
å®å šã«ç解ãããŠããŸãããå®éã«ã¯ãããã¯å€ãã®åªåãå¿ èŠãšãããã®ã©ã€ãã©ãªã¯æã®åªåã§ããïŒææã®åªåã§ã¯ãããŸããïŒã æ®å¿µãªãããç§ã¯ã¹ã³ãŒãããŠã³ããv2ã®åãçµã¿ãçµããæéãããããŸããã§ããããŸããŠãããã£ãšç©æ¥µçãªããšã¯èšããŸã§ããããŸããã ð
åçãªåãå¿ èŠãªå Žåã¯ããããã®ãŠãŒã¹ã±ãŒã¹ãååã«æ€èšãããœãªã¥ãŒã·ã§ã³ãææžåããŠãããšäŸ¿å©ã§ãã
å®å šã«ç解ãããŠããŸãããå®éã«ã¯ãããã¯å€ãã®åªåãå¿ èŠãšãããã®ã©ã€ãã©ãªã¯æã®åªåã§ããïŒææã®åªåã§ã¯ãããŸããïŒã æ®å¿µãªãããç§ã¯_ã¹ã³ãŒãããŠã³_ v2ã®åãçµã¿ãçµããæéãããããŸããã§ããããŸããŠãããã£ãšç©æ¥µçãªããšã¯èšããŸã§ããããŸããã ð
ããã ããããŸããã ããŸãããã°ããã®ãããªåªåã¯ã³ãã¥ããã£äž»å°ã«ãªãããšãã§ããŸãã
ããã§ããã-ãããç§ã®çµéšã§ã¯ãããã¯æ±ºããŠèµ·ãããŸããïŒsmileïŒ
DynamicSizedListã§WindowScroller
ã䜿çšã§ããŸããã§ãããããããããžã£ã¹ãã€ã³ã¿ã€ã ã¬ã³ããªã³ã°ã«ãã£ãŠscrollToãããŸãæ©èœããªããªã£ãããã§ãã ããã¯æ°ããããŒãžã§ã³ã§å¯èœã§ããïŒ
ç§ã«ã¯ãã®åªåãçµããæéããšãã«ã®ãŒããªããšããäºå®ãåãå
¥ããŸããã 誰ããç§ãå§ãããã©ã³ãã«è¶³ãèžã¿å
¥ããŠçµäºãããã®ã§ããã°ãç§ã¯ããªãã®å©ããæè¿ããŸãã ïŒ List
詳现ã«ã€ããŠã¯ãåé¡ïŒ6ãåç
§ããŠãã ããããžã£ã¹ãã€ã³ã¿ã€ã 枬å®ããµããŒãããã«ã¯ã Grid
ãå®è£
ããå¿
èŠããããŸããïŒ
ããã«ã¡ã¯@bvaughn ã
ããã€ãã®ã©ã³ãã ãªã¡ã¢ã䜿çšããŠããã©ãŒã¯ã«é¢ãããã£ã¹ã«ãã·ã§ã³ãäœæããŸããã
ãªã¹ãã«èŒããŠã¯ãããªããã®ãæ£ãããªããã®ãããã°æããŠãã ããã é²æ©ããããªã¹ããå®æãããŸãã
è¯ããã®ã®ããã«èŠããŸã
æãåèã«ãªãã³ã¡ã³ã
ç§ãã¡ã®å Žåãæ°Žå¹³ãªã¹ãã¯ã¢ãã€ã«ã§åºã䜿çšãããŠããŸãã ã³ã³ãããŒã«ã®ãããªç¡éã«ã¹ã¯ããŒã«å¯èœãªã«ã«ãŒã»ã«ã«ã䜿çšããŠããŸãã IMOã¯ã¢ãã€ã«äžã«ããå¿ èŠããããŸãã