react-measureã§æ§ç¯ãããAutoSizer
ãœãªã¥ãŒã·ã§ã³ãææžåããŸãïŒ Resize Observerä»æ§ã«åºã¥ããŠãããªãã£ã«ããããšãã§ããŸãïŒã ããã¯ããµã€ãºå€æŽãæ€åºããããã®ããå°æ¥ã«é©ããæ¹æ³ã®ããã§ãã
ä»ã®ãšãããç§ã¯ãã¹ã¿ã³ãã¢ãã³çã®å
¬éããŠããAutoSizer
ããã³ã³ããŒãã³ããåå¿ãããä»®æ³åããªã©ã®åå¿-ä»®æ³å-ãªãŒããµã€ã¶ãŒãã
ããããŸã ã³ãŒãã£ã³ã°ããŠããªãå Žåã ç§ã¯ãããæŸãã§ãããã ç§ã¯react-measureãè©ŠããŠã¿ãã€ããã§ããã
è¯ãïŒ TravisïŒ@souporseriousïŒã«é£çµ¡ããŠãã ããã 圌ãšç§ã¯ããã«ã€ããŠå°ã話ããŠããŸããã
ç§ã®æè¿ã®èãã¯ãreact-windowã¯AutoSizer
ã³ã³ããŒãã³ããå¿
èŠãšããªããšããããšã§ãã 代ããã«ããã®ç®çã§react-measureã䜿çšããæ¹æ³ãææžåããããšãã§ããŸãã ïŒè»œéã®ã©ãããŒã³ã³ããŒãã³ãããªãªãŒã¹ããããšãã§ãããããããŸããããã¡ã€ã³ã©ã€ãã©ãªã«å«ããã¹ãã§ã¯ãªããšæããŸããå°ãªããšããŸã èããŠããŸãããïŒ
åãããŸããã ããŸãããã react-measureã«ããå°ãæ £ãããã圌ã«ã¡ãŒã«ãéä¿¡ããŸãã
芪ããŒãã枬ââå®ããæ¹æ³ãã measureRef
ã芪ããŒãã«æž¡ãæ¹æ³ã«èå³ããããŸãã
ç§ã¯åãããšã«èå³ããããŸããïŒ ããã圌ãããã«ã€ããŠèšã£ãããšã§ãïŒ
ãããç§ã¯ããªããä»äœãæå³ããã®ãããããšæããŸãã ãããæ¥é±ã¬ããæŽæ°ãããŠãã ãããæ°ããAPIããããã©ã®ããã«å¯èœã«ãããããèŠãããŸãã 枬å®å€ã®åŠçæ¹æ³ãã«ã¹ã¿ãã€ãºã§ãããã¹ãŠã®measureRefã«ãåŒããªãã·ã§ã³ãæäŸããŸãããã®ãããAutoSizersã®å Žåã芪ã®æž¬å®å€ã調ã¹ãŠå€æŽæã«å ±åããã«ã¹ã¿ã åŒã䜿çšã§ããŸãã 埮調æŽãå¿ ââèŠãããããŸããããããŸãããã¯ãã§ãã
ããã«ã€ããŠTravisãšååãããšããã¢ã€ãã¢ã倧奜ãã§ãããªããªããïŒ1ïŒããã¯ãŠã£ã³ããŠåŠçã®åé¡ã§ã¯ãªãã®ã§ããã®ã©ã€ãã©ãªã§ææããå¿
èŠããªãã®ã¯è¯ãããšã§ããïŒ2ïŒåœŒã®ã¢ãããŒãã¯CellMeasurer
ãããæªæ¥çãªãã®ã®ããã§ã
ããã¯æ¬åœã«ææã«èãããŸãïŒ
芪ããŒãã§measureRef
ãåŒã³åºãã ãã®ã©ãããŒã³ã³ããŒãã³ãããã¹ãããŸãã ããã§ããŸãããã®ã ãããã
ãµã³ãããã¯ã¹ãæçš¿ããŸã
ãããç§ã®ã¢ãã¹ãããã£ã®äœ¿çšæ³ð€Šââïžð©
@wuweiweiwuããªããèå³ãæã£ãŠãããšèããŠããããã§ãïŒ ãŸã ããã€ãã®æ°ããã³ãŒãã§ãªã©ã€ãPRãæŽæ°ããå¿ èŠããããŸãã ææ¥ã®å€ã¯å°ãæéããããŸããããããæãéããããšãã§ããã¯ãã§ãã ãäžæãªç¹ãããããŸããããã©ã¡ããããã®ãã£ãŒãããã¯ããåŸ ã¡ããŠãããŸããæŽæ°ãã次第ãããã«ãé£çµ¡ããããŸãã®ã§ãè¯ã解決çã«ãã©ãçãããšãã§ããã°å¹žãã§ãð€ã
@souporseriousçŽ æŽãããïŒ æ¥œãã¿ã«ããŠããŸãã ç§ã¯ãŸã ãã³ãããã®äžã§react-measureã«ãã£ãšç²Ÿéããå¿ èŠããããŸã:)
@bvaughnç§ã¯ããã€ãã®ããããŒãªã³ãŒããšMeasure
httpsïŒ//codesandbox.io/s/xll21o5lo4ã®ã©ãããŒã§æ©èœããæŠå¿µå®èšŒãäœæãformula
ãªãã·ã§ã³ã奜ãã§ããã
@wuweiweiwuããä»äº!!! ããã¯ç§ãèããŠãããã®ãšäŒŒãŠããŸãã ã¡ãã£ãšããã¡ã¢ã§ããã rc
ã¿ã°ã®äžã«ã€ã³ã¹ããŒã«ã§ããæ°ããAPIãäœåã«ãããŸããããã¯ãå€ãAPIãšã¯å°ãç°ãªããŸãã ããã±ãŒãžãè¿œå ãããšãã«ãcodesandboxã®ããããããŠã³ã§ã¢ã¯ã»ã¹ã§ããŸãã parentNode
ãã€ããã§ããããmeasureRef
æž¡ããšããã¢ã€ãã¢ã奜ãã§ãã ãã¶ãã react-measure
ã埮調æŽããŠãäœæ¥ãç°¡åã«ããããšãã§ããŸãð€ã
ããã«ãç°¡åãªãµã³ãããã¯ã¹ããŸãšããŸããïŒ https ïŒ
ãã ããããã¯2ã€ã®ããŒããã©ããããŠãããããæãåªããAPIã§ã¯ãããŸããã formula
ãªãã·ã§ã³ã§ç§ãäºæž¬ããŠãã1ã€ã®åé¡ã¯ãå€æŽã«ã€ããŠèŠªã®ããŒããç£èŠããªãããšã§ããããã¯ã芪ã®ãã£ã¡ã³ã·ã§ã³ãååŸããããã«ã®ã¿äœ¿çšã§ããŸã...ãããã£ãŠããããæ©èœããä»ã®æ¹æ³ã¯æ¬¡ã®ãšããã§ãã APIãæž¡ãããšã«ãã£ãŠã ãã®ãããªããšã«ã€ããŠãããªããšããªãã®äž¡æ¹ãã©ã®ããã«æããŠããã®ãçåã«æããŸãð
<AutoSizer>
{({ bindParent, bindChild, width, height }) => (
<div {...bindParent}>
<div {...bindChild}>
{width} x {height}
</div>
</div>
)}
</AutoSizer>
ããã¯ç§ã®ãæ°ã«å
¥ãã§ã¯ãããŸãããðã ããã parentNode
ãã€ããã§ããããmeasureRef
æž¡ãããšã§ã react-measure
埮調æŽããã®ãæåãããããŸããã
ãã®äŸ^ãmeasureRef
ãæž¡ãããšãšã©ã®ããã«éãã®ãããããŸãããïŒ ã©ã¡ãã®å Žåãã AutoSizer
ã¯_parent_ã§ã¯ãªã_child_ã枬å®ããŠããŸãã ãããã£ãŠãè¿œå ã®ãã©ã¡ãŒã¿ãééããããšãå¿é
ããå¿
èŠããããŸãã
ç§ã«ãšã£ãŠäžå¹žã«æãããçç±ã¯æ¬¡ã®ãšããã§ãã
AutoSizer
ã¯ãããšãã°flex: 1 1 auto
ãªã©ã®ã¹ã¿ã€ã«ããããã¬ãã«ã®ã©ãããŒã«èšå®ããå¿
èŠããããããåå©çšæ§ãäœããªããŸãã ïŒããããã¬ãã¯ã¹ã³ã³ããã®å€ã§äœ¿çšãããå Žåã¯ã©ããªããŸããïŒïŒforwardRef
APIã䜿çšããå¿
èŠããããŸããã16.3以äžã«å¶éãããŸããïŒãããããã¯ç§ãèããŠãããã®ãšäŒŒãŠããŸãã ç§ã¯parentNode
ã¢ãããŒãã«åºå·ãããšæããŸãã AutoSizer
ãããªå Žåã react-measure
ã§ãããè¡ãããã®ããç°¡åãªåœä»€åã®æ¹æ³ãè¿œå ã§ãããããããŸããã ä»å€ãããã€ãã®ããšãããã£ãŠãããªãã«æ»ããŸãã
@souporseriousãããïŒ ç§ãææ°ã®ç¶æ ã«ä¿ã£ãŠãã ãã:)
@vx/responsive
ã«ã¯ParentSizeã³ã³ããŒãã³ãããããããã¯Resizeãªãã¶ãŒããŒä»æ§ã®è»œéã©ãããŒã§ããããŸããã react-measure
ã®æžãçŽããæ€èšããŠããã @ hshoffãšã®æ¡çšã«ã€ããŠæ€èšããŠããŸãã ãŸããããŒã«ããããªã©ã®ããŠã³ãã£ã³ã°ããã¯ã¹ã§ããŸãæ©èœããããšã確èªããå¿
èŠããããŸãã
ç§ã¯react-virtualizedã®AutoSizer
ãš@vx/respnosive
ã®ParentSize
äž¡æ¹ãmui-tableã³ã³ããŒãã³ãã§äœ¿çšããæåãåããŠããŸãã ç§ã¯çŸåšãããã€ãã®éãªãŒãã³ãœãŒã¹ã³ãŒãã§ParentSize
ã䜿çšããŠããŸãããFlexboxã®ã¹ã¿ã€ã«èšå®ãšãµã€ãºå€æŽã«åé¡ããããŸããïŒéåžžã¯å€§ããæ¹ãæ©èœããŸãïŒã
ãã@techniqã¯ããªããreact-measure
æ€èšããŠãããšèããŠå€§å¥œãã§ãïŒ ç³ãèš³ãããŸããããç§ã¯æžãçŽããæ ã£ãŠããŸãã ç§ã¯ç§ã®äž»ãªä»äºã§ãšãŠãå¿ããã£ãã§ããç§ã¯ãããæŒãç¶ããŠããŸãðã ã§ãããŸãšããããšãç§ã®æ¬¡ã®åªå
äºé
ã§ãã ç§ãã¡ã¯ããŒã«ããããããããªãŒããŒã®ããã«ä»äºãããŠããç§ã®ããŒã ã®UIãããã§ããã䜿çšããŠããã®ã§ãããŸãããã°ããªãã®ããŒãºã«ããŸã翻蚳ãããã¯ãã§ãã
ã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãããã«ãéå»ã«ParentSize
ã³ã³ããŒãã³ããèŠãŠããŸããã èå³ãããã°ãæ°ããreact-measure
ããŒãžã§ã³ãåºãããPRããŠæž¬å®éšåã«äœ¿ãããšãã§ããŸãã
@souporserious PRã¯ãæéãããã°çŽ æŽãããã§ãããã
ïŒHOCã®ä»£ããã«ïŒã¬ã³ããŒããããã䜿çšããããã«ãããå€ãã®ã³ã³ããŒãã³ãã移æ€ããããšã«é¢ããŠãåé¢é£ã®åé¡ããããŸãã ParentSize
ã¯ãã°ããåã«ç§»æ€ãããŸããïŒHOCã¯ãŸã å©çšå¯èœã§ãïŒããåé¡ã«ãªã¹ããããŠãããã®ã¯é¢é£ããŠããŸãïŒ ScreenSize
=芪ãšããŠã®ãŠã£ã³ããŠ/ãã¥ãŒããŒããããŠã³ãã£ã³ã°ããã¯ã¹ã®åŠçããã¹ãŠãã£ãŒãã®ãµã€ãºãšããŒã«ãããã«é¢é£ããŠããŸãïŒã
ããªãã®è«æ±æžæ¯æãã®ä»äºãæåã«çœ®ãããšãå®å šã«ç解ããŠãã ãããç§ã¯åãè¹ã«ä¹ã£ãŠããŸãðïŒç§ããªãŒãã³ãœãŒã¹ã®ããã®ããå€ãã®æéãæã£ãŠããã°ããã®ã§ãããçŸåšã®ä»äºã¯ã¿ã¹ã¯ãéæããããã«ããã䜿çšãã以å€ã«ããã«åãçµãããšãçŽæ¥ãµããŒãããŠããŸããïŒã
ä»ã®ãšãããç§ã¯ãã¹ã¿ã³ãã¢ãã³çã®å
¬éããŠããAutoSizer
ããã³ã³ããŒãã³ããåå¿ãããä»®æ³åããªã©ã®åå¿-ä»®æ³å-ãªãŒããµã€ã¶ãŒãã
AutosizerãšVariableSizeListã«åé¡ããããšæããŸãã
ã¹ã¯ããŒã«ãæ€åºããããã®HOCã³ã³ããŒãã³ããäœæããŸãããããªãŒããµã€ã¶ãŒã䜿çšãããšãã¹ã¯ããŒã«ã€ãã³ããã³ãã©ãŒãããªã¬ãŒãããŸããã ãªã«ãææ¡ã ïŒ
const Example = () => (
<div className={parentAutosizer}>
<AutoSizer>
{({height, width}) => (
<List
height={150}
itemCount={1000}
itemSize={getItemSize}
width={300}
>
{Row}
</List>
)}
</AutoSizer>
</div>
);
export const WindowScroll(Example)
ãããŠã¹ã¿ã€ã«ã¯ãããã§ã
parentAutosizer: {
position: 'absolute',
top: 0
bottom: 0
left: '0',
right: '0'
}
@MatteoGioiosoåé¡ã¯WindowScrollHOCã®äžã«é ãããŠãããšæããŸãã åé¡ã®ããcodesandboxããªããã°ãç§ãã¡ã¯è¯ãå©ããæäŸããããšã¯ã§ããŸããã
@TrySound
ç§ã¯ããã¯æããªãã ãªãŒããµã€ã¶ãŒã䜿çšããã«é«ããšå¹
ãæåã§èšå®ãããšãWindowScrollã¯æ£åžžã«æ©èœããŸãã
ãšã«ãããç§ã¯ãããã³ãŒããµã³ãããã¯ã¹ã§ææ¥è€è£œããããšããŸãã
ããããšã
ãã@ MatteoGioiosoð
AutoSizer
åé¡ãçºçããŠãããšã®ããšã§ããäžäŸ¿ããããããŠãããŸãã å¥ã®åé¡ãæåºããããšããå§ãããŸãïŒãã®åé¡ã¯ããã¥ã¡ã³ãã«é¢ãããã®ã§ããããïŒ_ããã_å®å
šãªåçŸã±ãŒã¹ïŒ WindowScroll
HOCãå«ãïŒãæäŸããªãéããåé¡ãäœæããªãã§ãã ãããèŠããªãã³ãŒãã§äœãããŸããããªãã®ããæšæž¬ããŸãã
@bvaughnããããŸããããããŸã=ïŒ
ç§ã¯antDã®ãããŒãŠãŒã¶ãŒã§ã¯é·ãéä»®æ³åã
ç§ã¯åœŒããå©ãããã®ã§ãããç§ãçæããåã«ããªãŒããµã€ã¶ãŒã§åå¿ãŠã£ã³ããŠã䜿çšããããã®ããªãã®çŸåšã®æšå¥šäºé ã¯äœã§ãããçåã«æã£ãŠããŸãããããªããã¡ãã£ã¢ã®åå¿ãŠã£ã³ããŠã§äœ¿çšããããã«æè·ããŠããã®ã¯åå¿ä»®æ³åèªåãµã€ã¶ãŒã§ãé·æçã«ã¯ïŒ
ã¯ããæšæºã®ResizeObservable
ããŒã¹ã®ã³ã³ããŒãã³ããååšãããŸã§/ååšããªãéããç§ã¯react-virtualized-auto-sizer
èªåã§äœ¿çšããŠããŸãã
ïŒ sooporserious / react-measureã¯æ³šæãããããŸãããïŒ
react-measure
ããã¯ããŒãžã§ã³ããªãªãŒã¹ããäºå®ã§ããããã¯ãã³ã³ããŒãã³ãã®èªåãµã€ãºèšå®ã«å°ãé©ããŠããŸãã
ç§ã¯çŸåšãReactã®çŸåšã®ã¢ã«ãã¡çã§ãã®ãããªãã®ãå©çšããŠããŸãã
ã³ã³ããŒãã³ãéå±€ã«äŸåããã®ã§ã¯ãªãã远跡ãããèŠçŽ ãµã€ãºãéçºè
ãèªç±ã«äœ¿ããããã«ãããããrefã¢ãããŒãã奜ãã§ãã
import { useState, useEffect, Ref } from 'react';
import ResizeObserver from 'resize-observer-polyfill';
const useAutoresize = (elementRef: Ref) => {
const [{ width, height }, setMeasurements] = useState({ width: 0, height: 0 });
const observer = new ResizeObserver(([{ contentRect }]) => {
setMeasurements({ width: contentRect.width, height: contentRect.height });
});
useEffect(
() => {
observer.observe(elementRef.current);
return () => observer.disconnect();
},
[elementRef]
);
return { width, height };
};
export default useAutoresize;
ç§ã¯ããããreact-windowã«AutoSizerãå®è£ ããããšããŠããŸãããä»ã®èª°ããããã«åãçµã¿ãããšæã£ãããç§ã¯äœãçŽæããããšã¯ã§ããŸãã
react-virtualized-auto- sizer ã ãšã¯ç°ãªãæ¹æ³ã§äœãããäºå®ã§ããïŒ
ç§ã¯æ°å¹Žåã«Reactçšã®éåžžã«è»œéãªæž¬å®ã©ã€ãã©ãªïŒäŸåé¢ä¿ã®ãªã400ãã€ãïŒããªãªãŒã¹ããŸãããããã¯éåžžã«ããŸãæ©èœããŸãïŒ x ïŒã
ããã䜿çšããŠAutoSizer
ã³ã³ããŒãã³ããäœæãããã®ã§ã react-window
ãšäžç·ã«åºè·ããã®ãçã«ããªã£ãŠãããšæããŸãïŒäž»ã«ãæçµçãªgzipå§çž®ããããã³ãã«ãµã€ãºã«1kbãè¶
ããŠè¿œå ãããªãããã§ããã¯ä»®æ³ãªã¹ããŠãŒã¶ãŒã®99ïŒ
ã«ãšã£ãŠå¿
é ã®æ©èœã§ãïŒããã¹ã¿ã³ãã¢ãã³ã©ã€ãã©ãªãšããŠåªããŠãããšæãããå Žåã¯ããã®æ¹æ³ã䜿çšããŸãã
å
·äœçã«ã¯ãåã»ã«ã³ã³ããŒãã³ãã«updateCellSize
é¢æ°ãæäŸããŠããµã€ãºã®æŽæ°ãç°¡åã«ãããã§ãã ããã¯ãä»®æ³ãªã¹ãã³ã³ããŒãã³ãã®å
éšã§äœ¿çšããã¢ãããŒãã§ãããéçºè
ã«ãšã£ãŠéåžžã«äœ¿ããããããšã蚌æãããŠããŸãã
ãããçã«ããªã£ãŠããå Žåã¯ç§ã«ç¥ãããŠãã ããã
åºæ¬ã®react-windowã©ã€ãã©ãªïŒèªåãµã€ã¶ãŒãªã©ãå«ãïŒã«ãç¹ã«ãŠã£ã³ããŠåŠçã«é¢ãããã®ä»¥å€ã®ãã®ãè¿œå ããããªããšæããŸãã ã¢ããªã³ããã±ãŒãžã«ãã¹ãã ãšæããŸãã
updateCellSize
ãã©ã®ããã«äœ¿çšããŠãããããŸããã®ãããªã©ã€ãã©ãªã§ã©ã®ããã«äœ¿çšãããŠãããã«ã€ããŠè©³ããç¥ããããšæããŸãã
updateCellSizeãã©ã®ããã«äœ¿çšããŠããããããã³ãã®ãããªã©ã€ãã©ãªã§ã©ã®ããã«äœ¿çšãããŠãããã«ã€ããŠè©³ããç¥ããããšæããŸãã
ããã¯ãå éšã§äœ¿çšããAPIã®ããã«èŠããŸãã
import { FixedSizeList as List } from 'react-window';
const Row = ({ index, style, updateCellSize }) => {
const [isOpen, setOpen] = useState(false);
return (
<div style={style} tabIndex={0} onClick={() => {
setOpen(isOpen => !isOpen);
updateCellSize();
}}>
Row {index}
{isOpen && 'Lorem lipsum dolor sit amet, the quick brown fox jumps over the lazy dog, woff.}
</div>;
}
}
const Example = () => (
<List
height={150}
itemCount={1000}
itemSize={35}
width={300}
>
{Row}
</List>
);
ããã¯å®å
šãªäŸã§ã¯ãªããšæããŸãã updateCellSize
ãšã¯äœã§ããïŒ ãããåŒã³åºããããšãã«ããã¯äœãããŸããïŒ è¡ãåºå®ãµã€ãºïŒ35pxïŒã®å Žåããããããªããããå¿
èŠãªã®ã§ããïŒ
@bvaughn isOpen
ç¶æ
ã¯ã div
ã®ãµã€ãºãæ¡åŒµããå¯èœæ§ããããŸãïŒãããäŸã¯ããã»ã©æ確ã§ã¯ãªãã£ããããããŸããïŒã
updateCellSize
ã¯ã cache.clear(index, 0)
ïŒ index
ã¯ã»ã«ã€ã³ããã¯ã¹ïŒãšforceUpdateGrid
ïŒå®éã«å¿
èŠãã©ããããããªãå Žåã§ãïŒãå®è¡ããã ãã§ãã
isOpen
ç¶æ ã¯ãdiv
ã®ãµã€ãºãæ¡åŒµããå¯èœæ§ããããŸã
FixedSizeList
ã¯ããããµããŒãããŸããã ãã¹ãŠã®è¡ã¯åºå®ãµã€ãºã§ãâäžèšã®äŸã§ã¯ã35ãã¯ã»ã«ã§ãã ãã¶ãããªãã¯VariableSizeList
ã䜿ã£ãŠããŸããïŒ
@bvaughnãããä»ã¯react-virtualizedã䜿çšããŠããŸãã åãæ¿ããããããã«ããã§è²¢ç®ãããã£ãã®ã§ãã ããããç§ã¯é ã®äžã§ããã€ãã®æ··ä¹±ããããšæããŸãð
åãããŸããã ããã VariableSizeList
ã¯react-virtualizedã®ããã«æ©èœããŸãã ããã¯ããªãã®ããã«åãã¯ãã§ãã
ãšãããããREADMEãæŽæ°ããŠã react-virtualized-auto-sizer
ã䜿çšãããœãªã¥ãŒã·ã§ã³ãææžåããŸããã ãã®è§£æ±ºçã¯ååã«è¯ãã®ã§ãç§ã¯ä»ã®ãšãããã®åé¡ãéããã€ããã§ãã ããã§ãã ResizeObserver
åºã¥ããã¢ãããŒãã調ã¹ãŠã話ãåãããšãã§ããŠããããã§ãã
react-windowå¯å€ãµã€ãºã°ãªããã§äœ¿çšãããšèªåãµã€ã¶ãŒã«åé¡ããããŸããå¯å€ãµã€ãºã°ãªããã§ã¯æ£ããæ©èœããŸããã å¯å€ãµã€ãºã°ãªããã®ãªãŒããµã€ã¶ãŒã§äœ¿çšãããœãªã¥ãŒã·ã§ã³ãŸãã¯äŸãããã€ãæäŸããŠãã ããã
åãã£ãŠæè¬ããŸã
@ sgupta317react -virtualized-auto-
<AutoSizer />
ã¯ããã®èŠªèŠçŽ ã®é«ããç¶æ¿ããŸãã
解決çïŒ height
ã100vH
èšå®ããã position
ãabsolute
èšå®ãããŠããdiv
ã§ã©ããããã ãã§ãã
@bvaughn React-windowãªã¹ãã䜿çšãããšã2ã€ã®ã¹ã¯ããŒã«ããŒã衚瀺ãããŸãã react-virualizedãªã¹ãã§ã¯ãautoheight = trueã䜿çšããããšã§ãããåé¿ã§ããŸãã ReactãŠã£ã³ããŠã§2ã€ã®ã¹ã¯ããŒã«ããŒãåé¿ããæ¹æ³ãæããŠãã ããã
ããã¯åèã®ããã«ç§ã®ã³ãŒãã¹ããããã§ãã
<WindowScroller>
{({ height }) => (
<AutoSizer disableHeight>
{({width}) => (
<List
width={width}
height={height}
itemCount={logFile.length}
itemSize={120}
overscanCount={10}
>
{({index,style}) => (
<div>
<div style={style} className="post">
<h3>{`${logFile[index].id}:-${logFile[index].first_name}-${logFile[index].last_name}`}</h3>
<p>{logFile[index].timestamp}</p>
</div>
</div>)}
</List>
)}
</AutoSizer>
)}
</WindowScroller>
ç¥å
ã®DOMèŠçŽ ã®1ã€ã«overflow: hidden
ããŸãã ãããåå ã§ããå¯èœæ§ããããŸãã
Resize ObserverããŒã¹ã®ãªãŒããµã€ã¶ãŒã䜿çšããŠããREããã®äŸã«åºã¥ããåçŽãªããã¯ã䜿çšããŠããããæ©èœãããŠããŸãã ãããŸã§ã®ãšããããŸãæ©èœããŠããããã§ã:)
æãåèã«ãªãã³ã¡ã³ã
react-measure
ããã¯ããŒãžã§ã³ããªãªãŒã¹ããäºå®ã§ããããã¯ãã³ã³ããŒãã³ãã®èªåãµã€ãºèšå®ã«å°ãé©ããŠããŸãã