рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдФрд░ рдЧреНрд░рд┐рдб рдШрдЯрдХреЛрдВ рдореЗрдВ рд▓рд╛рдЧрдд рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдПрдВ (рдЬреИрд╕реЗ DynamicSizeList
рдФрд░ DynamicSizeGrid
)ред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХрд╛ рдЖрд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдореЗрдВ CellMeasurer
рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдпрд╣ рдШрдЯрдХ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдКрдкрд░ рдХреА рддреАрд╕рд░реА рдмрд╛рдзрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдПрдХреНрд╕реЗрд╕ (рдЖрдЗрдЯрдо рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ рд╕реНрдХреНрд░реЙрд▓ рдСрдлрд╝рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдпрд╣ рдЪреИрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЙрддреНрдХреГрд╖реНрдЯ рдмрдирд╛ рджреЗрдЧрд╛ред
рдпрд╣ рднреА рдЖрдЗрдЯрдо рдЖрдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╕реНрдерд┐рддрд┐ рдФрд░ рдорд╛рдк рдХреИрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ ResizeObserver ( рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдорд╛рдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреИрд╢реНрдб рдорд╛рдк рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдФрд░ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред
рдЙрдкрд░реНрдпреБрдХреНрдд рд╕рдВрднрд╡ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрдиреЗрдорд┐рдХ рд╕реВрдЪреА / рдЧреНрд░рд┐рдб рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдСрдлрд╕реЗрдЯ рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред ( рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдореЗрдВ "рд╕реНрдХреНрд░реЙрд▓ рдПрдВрдХрд░рд┐рдВрдЧ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХреБрдЫ рдЕрдЪреНрдЫреЗ рджреГрд╢реНрдп рд╣реИрдВред) рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
estimatedItemSize
рдкреНрд░реЛрдк рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрдорд╛рдирд┐рдд рдХреБрд▓ рдЖрдХрд╛рд░ред (рдпрд╣ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдореИрдкрд┐рдВрдЧ рдлрд╝рдЬрд╝реА рдирд╣реАрдВ рд╣реИред)
рдЬрдм рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирдП рдСрдлрд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдкрд┐рдЫрд▓реЗ рдСрдлрд╕реЗрдЯ рд╕реЗ рдХрд░реЗрдВред рдпрджрд┐ рдбреЗрд▓реНрдЯрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ , рддреЛ
рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдореБрдЦ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИ: рд╕реВрдЪреА рд╕реАрдорд╛рдУрдВ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдЗрдЯрдо рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ), рддреЛ рд╡реЗ рд╕рдВрднрд╡рддрдГ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдорд╛рдорд▓рд╛ рдЬреЛ рдЕрднреА рднреА рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рдПрдВрдХрд░ рд╣реЛрдЧрд╛ рдЬреЛ "рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░" рдХреЗ рдмрд╛рд╣рд░ рд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реЙрд▓ рдЬреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрдХреНрд░реЙрд▓ рдЬрд╛рдирдХреА рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╕реЗрд▓ рдХреЛ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдорд╡реАрдкреА рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рдкрд░ рдХрд╛рдо https://github.com/bvaughn/react-window/compare/master..ississ/6 рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдореИрдВ рдЗрд╕реЗ рдореБрдИ-рдбрд╛рдЙрдирд╢рд┐рдлреНрдЯ рдХреЗ рднреАрддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ UNSAFE_componentWillReceiveProps
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ (рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреА рдКрдВрдЪрд╛рдИ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░) react-window
рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдпрд╣ IOS able рдореЗрдВ UITableView рдореЗрдВ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрдВрддреНрд░ рд╣реИ
@ рд▓реНрд▓реЛрдмреЛрдбрд┐рдВрдЧ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@bvaughn рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░реЗ рдорд┐рддреНрд░, рдореЗрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдЪрдпрдирд┐рдд рддрддреНрд╡ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рдФрд░ рдЬрд╛рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВ рдПрдХ IOS рдбреЗрд╡рд▓рдкрд░ рдерд╛, рдореБрдЭреЗ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрдВрддреНрд░ рдкрддрд╛ рд╣реИ IOS рдореЗрдВ UITableView, рдЕрдЧрд░ рдореБрдЭреЗ 500px рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реЗ рдЪреБрдирд┐рдВрджрд╛ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдСрдкреНрд╢рди-рдПрд▓рд┐рдореЗрдВрдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреА рдКрдБрдЪрд╛рдИ рдХреЛ 100px рддрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдмрд╕ рдСрдкреНрд╢рди рдПрд▓рд┐рдореЗрдВрдЯ (Math.floor (500/100)) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдСрдкреНрд╢рди рдПрд▓рд┐рдореЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХрддрд╛рд░ рдХреА рдХреНрд╖рдорддрд╛ (рдХрд░рдВрдЯ рдбрд┐рд╕рдкреНрд▓реЗрд╕реЛрд░реНрд╕рд╕реЛрд░реНрд╕ рдХрддрд╛рд░) ), рдЬрдм рдореИрдВ рдЪреБрдирд┐рдВрджрд╛ рддрддреНрд╡ рдХреЛ рдКрдкрд░ рдпрд╛ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдореЗрдВ рдзрдХреНрдХрд╛ рдпрд╛ рдкреЙрдк рдХрд░реЗрдВред
рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЦрд┐рдбрд╝рдХреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдпрд╣ рдореЗрд░реЗ рдЙрд▓реНрд▓реЗрдЦ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ (рдФрд░ рд╡рд┐рдВрдбреЛрд┐рдВрдЧ, рдпрд╛ рд░реЛрдбрд╝рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ) рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛ рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ рд╣реИред рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдКрдБрдЪрд╛рдИ рд╣реЛрддреА рд╣реИ- рдЗрд╕рд▓рд┐рдП рдЖрдк FixedSizeList
рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://react-window.now.sh/#/examples/list/fixed -size
рдПрдВрдХрд░рд┐рдВрдЧ рдХреЛ рджреЗрд╢реА-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред
рдЕрдЧрд░ рдореИрдВ рдмрд╛рд░ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдЖрд░реЗрдЦреЛрдВ рдкрд░тАж
@bvaughn рдЖрдк рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдм рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ, рдореИрдВ рдЗрд╕рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ 1.0.0 рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╕рдордп рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп (рдФрд░ рдКрд░реНрдЬрд╛) рдЦреЛрдЬрдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИред рдлрд┐рд░ рднреА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдХрдм рд╣реЛрдЧрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдиреБрдорд╛рди рдирд╣реАрдВред
рдкреЙрд▓реАрдорд░ рдХреА "рдЖрдпрд░рди рд▓рд┐рд╕реНрдЯ" рдХреА рддрд░рд╣ рд╣реА рдПрдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: https://github.com/domenic/infinite-list-study-group/blob/master/studies/Polymer-iron-list.md # рд╕рдВрд╕реНрдХрд╛рд░ -рд╕реВрдЪреА-рдЖрдХрд╛рд░
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЕрднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдШрдЯрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ рдЬреЛ рдКрдВрдЪрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХреЛ рдЖрднрд╛рд╕реА рд╕реВрдЪреА рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рддрд╛ рд╣реИред
@kevinder рдХреНрдпрд╛ рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рдкреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж
@carlosagsmendes рдХреЛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЪреИрдЯ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
1.) рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдлрд░реА рдмрдирд╛рдПрдВ рдФрд░ рдореЗрд░реЗ ChatHistory
рдШрдЯрдХ рдХреЗ рд▓рд┐рдП:
constructor(props) {
super(props);
this.listRef = createRef();
this.chatHistoryRef = createRef();
this.listHeight = 0;
}
рдореИрдВ рдлрд┐рд░ ChatHistory
рд▓рд┐рдП рд░реЗрдлрд░реА рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ
2.) рдореВрд▓ рдШрдЯрдХ рдХреЗ componentDidMount
рдореЗрдВ рдореИрдВ рддрддреНрд╡ рдХреА рдКрдВрдЪрд╛рдИ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ChatHistory
рд░реЗрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
componentDidMount() {
this.listHeight = this.chatHistoryRef.current.offsetHeight;
}
3.) рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдореИрдВ рдЪреИрдЯрд╣рд┐рд╕реНрдЯрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд░рдЦрддрд╛ рд╣реВрдВред рдЙрд╕ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВ:
// find out how many pixels in height the text is going to use
const size = getSize({
text: displayText,
className: styles.message,
});
let { height } = size;
height += 20; // adds some spacing in pixels between messages
...rest of items needed for the chat history item..add them all to an array and update state
getSize
https://github.com/schickling/calculate-size рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╡рд░реНрдЧ рдирд╛рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╡рд╣ рд╡рд░реНрдЧ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рддреЗрдЬрд╝ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рднреА рдореБрджреНрджрд╛ рдирд╣реАрдВ рдорд╛рд░рд╛ рд╣реИ
@osdlge : рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдХреЛрдИ рднреА рдбреЗрдореЛ рд╣реИ рдХрд╣реАрдВ рднреА рдореИрдВ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ (рдпрд╛ рдЗрд╕реА рддрд░рд╣) рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
@ рдмреАрд╡реА рдХреА рдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рдд, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ https://codesandbox.io/s/5z282z7q1l рдкрд░ рдирд┐рдХрд╛рд▓рд╛
рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! ЁЯШД
рдореИрдВрдиреЗ рдХреБрдЫ рдХрд╛рдо рдХреЛ рдкреНрд░рдЧрддрд┐ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╢реНрдпреВ / 6 рдирд╛рдордХ рд╢рд╛рдЦрд╛ рдореЗрдВ рдорд╛рдкрд╛ рдЧрдпрд╛ рд╣реИ
рдореИрдВрдиреЗ рдПрдХ рдбреЗрдореЛ рднреА рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ:
https://react-window-next.now.sh/#/examples/list/dynamic -size
рдмрд╣реБрдд рд╣реА рд╢рд╛рдВрддред
рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ / 6 рд╢рд╛рдЦрд╛ рд╕реНрд░реЛрдд рдФрд░ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЕрдирдВрдд рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рдордЭ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдпрд╣ рддрдм рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдФрд░ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
рдЙрдкрд░реНрдпреБрдХреНрдд рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ 'рдПрдВрдХрд░ рд╕реНрдХреНрд░реЙрд▓' рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдВрдХрд░рд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд▓реЗрдЦ рдпрд╛ рд╕реАрдПрд╕рдПрд╕ рд╕реНрдХреНрд░реЙрд▓ рдПрдВрдХрд░рд┐рдВрдЧ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЬреИрд╕реА рддрдХрдиреАрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ?
рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж
рдпрд╣ рдЖрдкрдХреЗ рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдирдВрдмрд░ рдкрд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд▓реНрдкрдирд╛ рдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдореИрдВрдиреЗ "рдЕрдЧрд▓рд╛" (рдЬреИрд╕реЗ yarn add react-window@next
) рдПрдирдкреАрдПрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ рдХрд╛ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЖрдк рдЗрд╕ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
https://codesandbox.io/s/5x8vlm0o7n
рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ 10000 рдЕрдиреБрдЪреНрдЫреЗрджреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЕрдВрдд рддрдХ рдХреВрджрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЭрдЯрдХреЗрджрд╛рд░ рдерд╛ред
рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдВрдд рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЕрдиреБрдорд╛рдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рддреБрд░рдВрдд рдЕрдВрдд рддрдХ рдХреВрджрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?
12 рдЕрдХреНрдЯреВрдмрд░ 2018 рдХреЛ, 12:53 рдмрдЬреЗ, рдмреНрд░рд╛рдпрди рд╡реЙрди рд╕реВрдЪрдирд╛рдПрдБ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдореИрдВрдиреЗ NPM рдХреЗ рдкрд╣рд▓реЗ-рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ "рдиреЗрдХреНрд╕реНрдЯ" рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╛рд░реНрди рдРрдб рд░рд┐рдПрдХреНрд╢рди-рд╡рд┐рдВрдбреЛ @ рдиреЗрдХреНрд╕реНрдЯ)ред
рдЖрдк рдЗрд╕ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
https://codesandbox.io/s/5x8vlm0o7n https://codesandbox.io/s/5x8vlm0o7n
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/bvaughn/react-window/issues/6#issuecomment-429271555 рдкрд░ https://github.com/notic/unsubscribe-auth/ рдкрд░ рдореНрдпреВрдЯ
рдирд╣реАрдВ, рдореИрдВрдиреЗ рдЬрд┐рд╕ рдЖрд░рдВрднрд┐рдХ рд╢рд╛рдЦрд╛ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ
рдЗрд╕ рдЕрдВрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рднреЛрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддрд╛ рд╣реИ
рдмрд╛рдж рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реЗ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдкрдирд╛ред
рдЧрд▓рддрдлрд╣рдореА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ!
рд╢реБрдХреНрд░ рдкрд░, 12 рдЕрдХреНрдЯреВрдмрд░, 2018, 6:34 рдЕрдкрд░рд╛рд╣реНрди рд╕реВрдЪрдирд╛рдПрдБ @ithub.com рдиреЗ рд▓рд┐рдЦрд╛:
рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ 10000 рдЕрдиреБрдЪреНрдЫреЗрджреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдХреВрджрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рд╕рдорд╛рдкреНрддред рдЭрдЯрдХреЗрджрд╛рд░ рдерд╛ред
рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдиреБрдорд╛рдирд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдорд╛рдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдВрдд рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рддреБрд░рдВрдд рдХреВрджрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛
рд╕рдорд╛рдкреНрддред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ?12 рдЕрдХреНрдЯреВрдмрд░ 2018 рдХреЛ, 12:53 рдмрдЬреЗ, рдмреНрд░рд╛рдпрди рд╡реЙрди рд╕реВрдЪрдирд╛рдПрдБ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдореИрдВрдиреЗ рдПрдирдкреАрдПрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ рдХрд╛ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
"рдЕрдЧрд▓рд╛" (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╛рд░реНрди рд░рд┐рдПрдХреНрд╢рди-рд╡рд┐рдВрдбреЛ @ рдЕрдЧрд▓рд╛ рдЬреЛрдбрд╝реЗрдВ)редрдЖрдк рдЗрд╕ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ:
https://codesandbox.io/s/5x8vlm0o7n < https://codesandbox.io/s/5x8vlm0o7n-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub <рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/bvaughn/react-window/issues/6#issuecomment-429275555,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ <
https://github.com/notifications/unsubscribe-auth/AOf2h7RmSEyGmyrEdMY6GgyZFjCKlDDFks5ukGafgaJpZM4bb3P
ред-
рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/bvaughn/react-window/issues/6#issuecomment-429282228 ,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AABznR5R1N0ErukleIfvaLQORF_NECgRks5ukHBHgaJpZM4UTb3P
ред
рдЕрд░реЗ,
рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ?
рдореЗрд░реА рдЯреАрдо рдиреЗ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП react-virtualized
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдФрд░ рдХреВрджрдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЪрд┐рддреНрд░ рдФрд░ рдЕрдиреНрдп рдмрджрд▓рддреА рд╕рд╛рдордЧреНрд░реА рд╣реИ)ред
рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреА рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ react-window
рдХреА рдУрд░ рдкрд▓рд╛рдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВрдЧреЗ? рдпрд╛ рд╣рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рд▓реАрдЬ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЗрд╕ рдлреАрдЪрд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░ рд╕рдХреВрдВ рддреЛ рдореБрдЭреЗ way рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдЗрд╕ рд╕рдордп рдПрдХ рд░рд┐рд▓реАрдЬрд╝ рдЯрд╛рдЗрдорд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдмрд╣реБрдд рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдХрдм рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рдЪрд▓рд╛рдКрдВрдЧрд╛ рдЬрдм рдореИрдВ рдХрд░реВрдБрдЧрд╛ (рдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛? рдЙрдиреНрд╣реЗрдВ)ред
рдпрджрд┐ рдЖрдк рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдмрдЧ рдорд┐рд▓рддрд╛ рд╣реИред
рдореИрдВ рд╢рд╛рдпрдж рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдХрд┐рддрдиреА рдЬрд▓реНрджреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ рдпрд╛ рджреЛ рдХреЗ рд▓рд┐рдП рдореИрдВ рд░рд┐рдПрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реВрдВ рдФрд░ 16.6 рд░рд┐рд▓реАрдЬ рдХреЛ рддреИрдпрд╛рд░ рд╣реВрдВред
@bvaughn рдорд╣рд╛рди рдХрд╛рдо
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм display: none
рдХреЗ рд╕рд╛рде рд╕реВрдЪреА рдХреЛ рдЫреБрдкрд╛рдиреЗ рдореЗрдВ рд╣рдореЗрдВ рдХреБрдЫ рдореЛрдбрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдЯреИрдм рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐ рдЖрджрд┐) рдХреЛ рдЦреЛрдП рдмрд┐рдирд╛ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рджреБрд░реНрд▓рдн рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред ред
рд╕рд░рд▓ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ:
https://codesandbox.io/s/p7vq18wmjq
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╣рдо рдХрд┐рд╕реА рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХреЗ рдкрд╛рд╕ offsetHeight === 0
рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдирдП рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдХреНрд╕ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддрд╛ рд╣реИред react-window
рдХреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдХреЙрд▓рд░ рдиреЗ рдЗрд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рддреЛ рдмреБрдирд┐рдпрд╛рджреА рдХреЛ handleNewMeasurements
рдЕрд╡рд░реБрджреНрдз рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдЧрд░ рдпрд╣ рд▓рд╛рдЗрди
https://github.com/bvaughn/react-window/blob/issues/6/src/DynamicSizeList.js#L443
рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛
handleNewMeasurements: instance._handleNewMeasurements
рддрдм рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЙрдЬрд┐рдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
let _handleNewMeasurements
<DynamicSizeList
ref={current => {
if (current) {
_handleNewMeasurements = current._handleNewMeasurements
current._handleNewMeasurements = (...args) => {
if (!isHidden) {
return _handleNewMeasurements(...args)
}
}
}
}}
{...otherProps}
рдореИрдВрдиреЗ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЛ рдПрдХ рдЕрдкрдбреЗрдЯ рджрд┐рдпрд╛ (рдФрд░ рдПрдирдкреАрдПрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ @next
рдЯреИрдЧ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛) рдЬреЛ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓ рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ, рд░рд┐рд╕рд╛рдЗрдХрд▓ рдХрд┐рдП рдЧрдП рдЖрдЗрдЯрдореЛрдВ рдХреЗ рд▓рд┐рдП margin-top
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдЪрд┐рдХрдиреА рд╕реНрдХреНрд░реЙрд▓ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред (рдореБрдЭреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХреБрдЫ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рдЦреБрд░рджрд░реЗ рдХрд┐рдирд╛рд░реЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдореИрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдлреАрдбрдмреИрдХ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, @piecykред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдЗрд╕рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред (рдпрд╣ рдЗрд╕ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рдЕрднреА рднреА рдПрдХ рддрд░рд╣ рдХрд╛ рд╕рд╛рдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред)
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП scrollBy
рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдорд╛рд░реНрдЬрд┐рди рд╣реИрдХ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реЗ IE рдФрд░ рдПрдЬ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдирдХреА рдЕрдкрдиреА рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рд╣рд╛рдБ @bvaughn рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рднрдпрд╛рдирдХ рдХрд╛рдо you рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЖрдк рд╕рдордп рдХреИрд╕реЗ рдкрд╛рддреЗ рд╣реИрдВ! ToрдХреБрдбреЛрд╕ рдЯреВ рдпреВ!
рд▓реЗрдХрд┐рди рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ рдЬрдм рд╕реВрдЪреА рдХреБрдЫ DOM рддрддреНрд╡ рдореЗрдВ рд╣реЛрддреА рд╣реИ рдЬреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдирдмрдВрд░ рд╕реЗ рдЫрд┐рдкреА рд╣реЛрддреА рд╣реИ, рдмреЗрд╕рд┐рдХ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд░реИрдкрд░ рдХреА рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ рд╣реИ рдЕрдЧрд░ рд╣рдо рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ) рдкреВрд░реА рд╕реВрдЪреА) рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ
рд╣рд╛рдВред рдЖрдк рдЬрд┐рд╕ рдореБрджреНрджреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдЙрд╕рдХреЗ рдореВрд▓ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдХрд┐рдВрдЧ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ / рдмрдВрджрд░-рдкреИрдЪрд┐рдВрдЧ рдХреЛ рдЕрдзрд┐рдХ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ @next рдкреИрдХреЗрдЬ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ?
рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╡рд╛рд▓ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдЬрдЧрд╣ рд╣реИ, рддреЛ рдореБрдЭреЗ рдорд╛рдл рдХрд░рдирд╛ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдБред рддреЛ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
DynamicSizeList
AutoResizer
рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреБрджреЛрд╕!рдореИрдВрдиреЗ JSON.parse (JSON.stringify (рдбреЗрдЯрд╛)) рд╣реИрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдХреЗ рдЖрдЗрдЯрдо рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ :-(
рдореБрдЭреЗ рдКрдВрдЪрд╛рдИ рдХреЗ рдПрдХ рдорд┐рд╕рдХреЙрд▓ рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдХреНрдпрд╛ рдЖрдк рдПрдХ рдХреЛрдбреИрдВрдбрдмреЙрдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рд╢рд╛рдпрдж рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдХреА рдорджрдж рдХрд░ рд╕рдХреЗрдВ
@vtripolitakis рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░реНрдЪрд╛ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЗрд╕рдХреЗ рд▓рд┐рдП @carlosagsmendes рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХреЗрд╕ рд╕реНрдЯрдбреА рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ DynamicSizeList
рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ :-(
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХрд╛рд░рдг рдорд┐рд▓рд╛:
state.scrollOffset
рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд▓реЗ рд░рд╣рд╛ рдерд╛ред
src/DynamicSizeList.js
рд╣рдореЗрдВ рд▓рд╛рдЗрди 299 рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛
if (sizeDeltaForStateUpdate < 0) {
sizeDeltaForStateUpdate = 0;
}
рд╣рдореНрдо ... рдореИрдВ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ, рдареАрдХ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдПрдХ рдЖрдХрд╛рд░ рдХрд╛ рдбреЗрд▓реНрдЯрд╛ рд╡реИрдз рд░реВрдк рд╕реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдирд╣реАрдВ?
рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрд╛рд░реНрдб ( Math.max(0, prevState.scrollOffset + sizeDeltaForStateUpdate)
) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ state.scrollOffset
рдореВрд▓реНрдп рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдирдорд╕реНрдХрд╛рд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЛ sizeDeltaTotal
рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рд▓рд┐рдпрд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░ sizeDeltaForStateUpdate
рдирдХрд╛рд░рд╛рддреНрдордХ рдмрдирд╛рдпрд╛, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ state.scrollOffset
рдЕрджреНрдпрддрди рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ред
рдпрд╣ рддрдм рд╣реБрдЖ рдЬрдм рдореИрдВрдиреЗ рдЖрдЗрдЯрдореЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рдФрд░ рдлрд┐рд░ scrollOffset
0 рдФрд░ рджрд┐рд╢рд╛ backwards
рд╡рд╛рд▓реЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ред рддрдм рдпрджрд┐ рдореИрдВ рдХреБрдЫ рд╕рдордп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреАрдЫреЗ рд╣рдЯ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдорд┐рд▓реАред
рд╣рд╛рдВ, рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред ~ рдпрд╣ рдЕрднреА рдкрд░реАрдХреНрд╖рдгред ~ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@marcneander 1.4.0-alpha.1
рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рдЕрдирджреЗрдЦреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрдм рд╕реВрдЪреА рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ https://github.com/piecyk/react-window/commit/acfd88822156611cfd38872acdafbbefd2d0f78f
@bvaughn рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?
рдореИрдВ рдПрдХ рдЪреИрдЯрдмреЙрдХреНрд╕ рд╢реИрд▓реА рдРрдк рдореЗрдВ рдСрдЯреЛ-рд╕реНрдХреНрд░реЙрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ: DynamicSizeList does not support scrolling to items that have not yet measured. scrollToItem() was called with index 111 but the last measured item was 110.
рдореИрдВ scrollToItem(items.length-1)
componentDidUpdate
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдХреНрдпрд╛ рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?
рд╣рд╛рдБ, рд╢рд╛рдпрдж рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ @piecyk that
рдХреНрдпрд╛ рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?
рдпрд╣ @xaviergmail рдХреА рддрд░рд╣ рдзреНрд╡рдирд┐ рдирд╣реАрдВ рд╣реИ, рдирд╣реАрдВред рд╢рд╛рдпрдж рдПрдХ рдмрдЧред
рд╣реЗ @bvaughn рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдЯрд░реА рд╕реЗ рдЙрддрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЭрдВрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдлреНрд▓реЗрдХреНрд╕ 4 рдбреЗрдЯрд╛рдЧреНрд░рд┐рдб рдЖрдВрддрд░рд┐рдХ рд╕реЗ рдПрдХ рд╕рд╛рдл рд╡рд┐рд░рд▓ рд╕рд░рдгреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ Flash: -1 :,, рд▓реЗрдХрд┐рди рдлреНрд▓реЗрдХреНрд╕ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рд▓реЗрдЖрдЙрдЯ рдЗрдВрдЬрди рдерд╛ ... рдХреНрдпреЛрдВрдХрд┐ Flash :-)
LinearLayoutVector рдПрдХ рдЖрдпрд╛рдо рдореЗрдВ рдЖрдЗрдЯрдо рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд░рд▓ рд╕рд░рдгреА рд╣реИред рддреАрди рдмреБрдирд┐рдпрд╛рджреА рдСрдкрд░реЗрд╢рди рд╣реИрдВ:
interface LinearLayoutVector {
start: (index) => position;
end: (index) => position;
indexOf: (position) => index;
}
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рд╕реНрдЯреЛрд░рд┐рдВрдЧ рдЖрдЗрдЯрдо рдкрджреЛрдВ рдХреЗ рд▓рд┐рдП 2 рдХреА рд╢рдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рд▓реНрдЯреА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдХреНрддрд┐ рдХреЛ рдмрдбрд╝реЗ рдпрд╛ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░реЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдпрд╣ рдирд┐рд░рдВрддрд░-рд╕рдордп O (1) index -> position
рд▓реБрдХрдЕрдк рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ position -> index
рд▓реБрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рд░реИрдЦрд┐рдХ рдмреНрд▓реЙрдХ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреИрдбрд┐рдВрдЧ, рдЕрдВрддрд░рд╛рд▓, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдХрд╛рд░, рдФрд░ рд░реИрдВрдбрдо-рдПрдХреНрд╕реЗрд╕ рд╕рдореНрдорд┐рд▓рди, рд╣рдЯрд╛рдиреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдЧрднрдЧ 6 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрдм рдореИрдВ рдореЛрдмрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб UI рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП ES6 рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрдпрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЧрддрд┐ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рддрд░реНрдХ рдзреНрд╡рдирд┐ рд╣реИред
рдореИрдВрдиреЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдкрд╣рд▓реЗ рд░рд┐рдПрдХреНрдЯ-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреНрд░рд╛рдлреНрдЯ CellSizeAndPositionManager
рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕реНрд╡рд┐рдЪ рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЗрд╕рдиреЗ рдХреБрдЫ рдкреВрд░реНрдг / рдХреИрд╢ рдЕрдорд╛рдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдиреАрдЪреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЕрдЧрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдкреАрдЖрд░ react-window
рдЬрдорд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рд╛рдп @trxcllnt nt
рдпрджрд┐ рдЖрдк рдПрдХ рдкреАрдЖрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдПрдХ рдмрд╛рд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдБред рдЖрдк рдЗрд╕реЗ issues/6
рд╢рд╛рдЦрд╛ (WIP PR # 102) рдХреЗ рд╡рд┐рд░реБрджреНрдз рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ, linear-layout-vector
рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рд╣реБрдЖ рд╣реИ рдпрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдереЛрдбрд╝реА рдЕрдирд┐рдЪреНрдЫрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдПрдХ рдирдЬрд╝рд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рдореИрдВ рдпрд╣ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдмрджрд╕реВрд░рдд + рдорд┐рдирд┐рдлрд╛рдЗ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдХрд┐рддрдирд╛ рд╡рдЬрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред ЁЯШД
@bvaughn рдХреЛрдИ рдкрд╕реАрдирд╛, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдРрд╕реА рдЪреАрдЬ рдереА рдЬреЛ рдореИрдВрдиреЗ рд╕рд╛рд▓реЛрдВ рдкрд╣рд▓реЗ рдХреНрд░рд┐рд╕рдорд╕ IIRC рдкрд░ рдХреА рдереАред рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рд╕рд╛рде рднреВрдорд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВред рдпрд╣ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕реАрдзреЗ рдпреЛрдЧрджрд╛рди рджреЗрдХрд░ рдЦреБрд╢ рд╣реВрдВред
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣ рдкреЛрд░реНрдЯ рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдерд╛: https://github.com/trxcllnt/virt-listред рдЙрд╕ GH рдкреГрд╖реНрда рд╕рд╛рдЗрдЯ рдХреЛ рд╣рд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд▓реНрдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдлреЗрдВрдХреЗрдВ (рдпрд╣ рд░реЗрдВрдбрд░ рдкрд░рдлреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ рдЬреЛ рд╣рдо рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдореЗрдВ рдЖрдИрдУрдПрд╕ рдЯреАрдо рдореЗрдВ рдереЗ)ред
@bvaughn рдЙрди рд╕рднреА
рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╢рд┐рдкрд┐рдВрдЧ рдкрд░ ^1.6.0-alpha.1
рдФрд░ рдпреЛрдЬрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рд╢рд╛рдЦрд╛ рдкрд░ рдирд╡реАрдирддрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП DynamicSizeList
рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдбреЙрдХреНрд╕ рдХреЗ рдмрд╛рдж рдФрд░ рдореБрджреНрджреЛрдВ / 6 рд╢рд╛рдЦрд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░реЗрдВрдЧреЗ
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрдп рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдФрд░ ...
import { DynamicSizeList as List } from 'react-window';
import AutoSizer from 'react-virtualized-auto-sizer';
// in constructor(props) for handling scrolling
this.listRef = React.createRef();
// in render()
const allItems = [...];
const Renderer = ({ forwardedRef, style, index, ...rest }) => (
<div ref={forwardedRef} style={style}>
<MyCoolComponent index={index} otherProps={otherPropsBasedOnAllItems} />
</div>
);
const RefForwarder = React.forwardRef((props, ref) => (
<Renderer forwardedRef={ref} {...props} />
));
return <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}>
<div style={{ flexGrow: 0, flexShrink: 0, width: '100%', position: 'sticky', top: 0, zIndex: zIndexHideLayers }}>
<MyCoolComponentThatControlsScrolling listRef={this.listRef} />
</div>
<div style={{ flex: 1, width: '100%' }}>
<AutoSizer>
{({ height, width }) => (
<List ref={this.listRef} itemCount={allItems.length} width={width} height={height}>
{RefForwarder}
</List>
)}
</AutoSizer>
</div>
</div>;
рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рдВрднрд╡рддрдГ рдЙрд╕ рдбреЙрдХреНрд╕ рдкреГрд╖реНрда рдкрд░ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдЕрдкрдбреЗрдЯ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛
рд╢рд╛рдЦрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛?
ЁЯТп рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
ЁЯОЙ рд╕рднреА рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: DynamicSizeList
рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдм рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рд╡рд░рдг рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЬрдм рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреИрдВрдбрд╡рд┐рдбреНрде рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореИрдВ рдЙрдирдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░реВрдБрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдЯрдо рдХреЗ рдкрд┐рдЫрд▓реЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреЗрд╡рд▓ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХреЛрдИ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИред (рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ "рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдкрд╛ рдЧрдпрд╛ рдЖрдХрд╛рд░" рдФрд░ "рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░" рдХреЗ рдмреАрдЪ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдкрд╛ рдЧрдпрд╛ рдЖрдХрд╛рд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдбреЗрдЯрд╛ рдореЗрдВ рдордирдорд╛рдиреА рдЬрдЧрд╣реЛрдВ рдкрд░ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЖрдИ рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд┐рдП рдмрд┐рдирд╛, рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдЖрдЗрдЯрдо рдЖрдХрд╛рд░ рдХреИрд╢ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рдореБрдХреНрдд рдХрд░реЗрдЧрд╛ред)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░реЙрд▓ рдПрдВрдХрд░рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рдлреА рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЫрд▓рд╛рдВрдЧ (рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрдгрд┐рдд рд╣реИ) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ "рдкрд╣рд▓реЗ" (рдКрдкрд░ рдпрд╛ рдмрд╛рдПрдВ) рд╕рдм рдХреБрдЫ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рд▓реНрдХреБрд▓ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдерд╛ред рдлрд┐рд░ рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд╣рдо рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рд╖реНрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВред
рд╢рд╛рдпрдж рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
@bvaughn рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧреА рдЬрд┐рд╕реЗ
рдЖрдЗрдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдПрдкреАрдЖрдИ рдЪрд░реНрдЪрд╛ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦреЗрдВ, рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдкрд░ рдирд╣реАрдВред
рдореИрдВ рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдЗрд╕ API рдореЗрдВ resetAfterIndex рдХреЛ рдПрдХреНрд╕рдкреЛрдЬрд╝ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдореИрдВ рдЕрдкрдиреЗ рдбрд╛рдпрдиреЗрдорд┐рдХрд╕рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рдХрдо рд╕реЗ рдХрдо рдЬреЛ рдореИрдВ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╣реЛрдЧреА, рд╣рд╛рдВ?
@bvaughn рд╡реАрдХреЗрдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдПрдВрдХрд░ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдЗрдЯрдо рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рд╕реНрдХреНрд░реЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ ... рдкрд╣рд▓рд╛ рдЗрдВрдкреНрд░реЗрд╢рди рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ icity рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рдУрд╡рд░рд╕реНрдХреИрди рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ, рд╣рдо рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЗрд╕ wip рдореЗрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд╛рдл рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ) ... рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?
poc рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди https://github.com/piecyk/react-window/pull/2/files
рдпрд╣рд╛рдБ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╣реИ рдЬреЛ рд╢рд╛рдЦрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ
https://codesandbox.io/s/4x1q1n6nn9
рдЙрд╣-рдУрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреНрд░реЛрдо рдХреА рддрд░рд╣ рддреЗрдЬрд╝ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ foxтЩВя╕ПтЩВя╕П
рдореИрдВ рдПрдХ рдЪреИрдЯрдмреЙрдХреНрд╕ рд╢реИрд▓реА рдРрдк рдореЗрдВ рдСрдЯреЛ-рд╕реНрдХреНрд░реЙрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ:
DynamicSizeList does not support scrolling to items that have not yet measured. scrollToItem() was called with index 111 but the last measured item was 110.
рдореИрдВ
scrollToItem(items.length-1)
componentDidUpdate
рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВрдХреНрдпрд╛ рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ?
рджреЗрд░ рд╕реЗ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп (рдФрд░ рд╕рд░рд▓) рдмрдирд╛рдиреЗ рдФрд░ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЕрднреА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
https://cl.ly/87ca5ac94deb
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдЪреИрдЯ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ?
рдЙрд╣-рдУрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреНрд░реЛрдо рдХреА рддрд░рд╣ рддреЗрдЬрд╝ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдирд╛рдЗрдЯрд▓реА рд╕рдВрд╕реНрдХрд░рдг 68 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@bvaughn рдореИрдВ рдПрдХ рдлрд╝реАрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП InfiniteLoader рдФрд░ Autosizer рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде DynamicSizeList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рддрдХ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреЛ :)
рдПрдкреАрдЖрдИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ:
рдХреНрдпрд╛ рд╣рдо рдЖрдЗрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдЗрдЯрдордХреЗрдпрдмреИрдХ рдореЗрдВ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдлрд┐рдХреНрд╕реНрдбрд▓рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣реИ?
рдХреНрдпрд╛ рд╣рдо рдЖрдВрддрд░рд┐рдХ рдХрдВрдЯреЗрдирд░ рдКрдВрдЪрд╛рдИ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ / рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП DynamicSizeList
1.6.0-alpha.1
рд╕рд╛рде InfiniteLoader
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрдорд╛рд▓ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдореБрдЭреЗ scrollToItem()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд╛рдкрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:
DynamicSizeList does not support scrolling to items that yave not yet measured. scrollToItem() was called with index 9 but the last measured item was -1.
рдпрд╣ рд╕рдордп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдВрдмреЗ setTimeout
рдмрд╛рдж рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рддреЛ, рдХреНрдпрд╛ рдореИрдВ рдорд╛рдк рдХреЛ рдмрд▓ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╛ рдХреЛрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИрдВ?
EDIT : рдиреЗрд╡рд░рдорд╛рдЗрдВрдб, initialScrollOffset
рдиреЗ
FindDOMNode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
рдХреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ @next
рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВ?
@WillSquire рдирд╣реАрдВ, рд╡реЗ рдирд╣реАрдВред рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ @next
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ (рдореБрдЭреЗ рдЧрд▓рдд рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рддрдХ рдЗрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдФрд░ рдЪреВрдВрдХрд┐ рдПрдкреАрдЖрдИ рдЕрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
@bvaughn рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░
# 102 рдкрд░ @brunolemos рдореЗрд░реА рдЯреВрдбреВ рд╕реВрдЪреА рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдмрд╣реБрдд рд╕рдЯреАрдХ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рдХреНрд╖рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ!
рдореБрдЭреЗ рддреИрдирд╛рдд рд░рдЦреЗрдВ!
~ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред ~
рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЖрдЗрдЯрдо рд░реЗрдВрдбрд░ рдорд╣рдВрдЧрд╛ рд╣реЛ рдпрд╛ рджреВрд╕рд░реА рдЪреАрдЬред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ 100% рдХрдВрдЯреЗрдирд░ рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде AutoSizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ 100vh рдФрд░ calc () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдвреВрдВрдврдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛
рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рд╣реЛрдЧрд╛
рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ?
рдореИрдВ 1.6.0-рдЕрд▓реНрдлрд╛.1 рд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХрд▓рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдб рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж
рдирдорд╕реНрдХрд╛рд░, рдореИрдВ DynamicSizeList
рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рднреА рдЖрдЗрдЯрдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╣реИрдВред рдореИрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ style
рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ height
рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, top
рдФрд░ left
рд╣рдореЗрд╢рд╛ 0
ред
рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдпрд╛рдж рдЖрдпрд╛ :-)?
@ рдЕрдВрдЧреВрд░-рдЧреИрдмреНрд░рд┐рдПрд▓ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдЬрдирди рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рдЖрддрд╛ рд╣реИред
рдКрдБрдЪрд╛рдИ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╢реБрд░реВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рддрд╛рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ ...
рдареАрдХ рд╣реИ, рдореИрдВ рддрд░реНрдХ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдХреА рд╣реИ рдпрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрджрдо рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдиреАрдЪреЗ рдирд╣реАрдВ рдЧреБрдЬрд░рдирд╛)ред
import React from 'react'
import { DynamicSizeList as List } from 'react-window'
import Layout from '../Layout'
import Text from '../Text'
import withScreenDimensions from '../withScreenDimensions'
class ListView extends React.Component {
state = {
availableHeight: 0
}
componentDidMount() {
const checkForHeightChange = () => {
if (this.containerDiv) {
const { offsetHeight } = this.containerDiv
if (this.offsetHeight !== offsetHeight) {
this.offsetHeight = offsetHeight
this.setState({ availableHeight: offsetHeight })
}
}
}
checkForHeightChange()
this.intervalId = setInterval(checkForHeightChange, 10)
}
componentWillUnmount() {
clearInterval(this.intervalId)
}
render() {
const {
data,
renderItem,
emptyText,
dimensions,
} = this.props
const { width } = dimensions
const { availableHeight } = this.state
return (
<Layout
centerVertical
style={{
height: '100%',
}}>
{data && data.length > 0 ? (
<div
style={{
display: 'flex',
flex: 1,
height: '100%',
backgroundColor: 'red',
alignItems: 'stretch',
justifyContent: 'stretch',
}}
ref={ref => this.containerDiv = ref}
>
<List
height={availableHeight}
itemCount={data.length}
width={width > 800 ? 800 : width}
>
{({ index, style }) => {
console.log('style', style)
return (
<div style={style}>
{renderItem({
item: data[index], index
})}
</div>
)
}}
</List>
</div>
) : (
<Text bold center padding accent>{emptyText}</Text>
)}
</Layout>
)
}
}
export default withScreenDimensions(ListView)
рдПрдХ рдХреЛрдб рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдпрд╣ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ?
рдореИрдВ рдЖрдкрдХреЗ рдЖрдЗрдЯрдо рд░реЗрдВрдбрд░рд░ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ _not_ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЫреВрдЯ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИред (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЗрдирд▓рд╛рдЗрди рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред)
@ graphee-gabriel рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдбреЙрдХреНрд╕ рдиреЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдПрдХ рд░реЗрдлрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрдВрдХреНрддрд┐ рдШрдЯрдХ рд╕рдорд░реНрдерди рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Row = React.forwardRef(
(row, ref) => (
<div ref={ref} style={row.style}>
{renderItem({
item: data[row.index],
index: row.index,
})}
</div>
),
)
рдирдорд╕реНрдХрд╛рд░, рдпрд╣рд╛рдБ рдЖрдк рдЬрд╛рддреЗ рд╣реИрдВ:
https://codesandbox.io/s/sweet-sea-irxl8?fontsize=14
рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЗрд╕реЗ рдпрд╣рд╛рдБ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рд▓рд┐рдпрд╛ред
рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВред
Annnnnd рдореИрдВ рдЙрд╕ рд╕реИрдВрдбрдмреЙрдХреНрд╕ hehe рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ @brunolemos рд╕рдВрджреЗрд╢ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЧрд╛рдпрдм рдХрджрдо рдерд╛, рдФрд░ рдореЗрд░реЗ рдореБрджреНрджреЗ рдХреЛ рддрдп рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!
рдЗрд╕рдиреЗ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЙрдард╛рдпрд╛, рдореИрдВрдиреЗ рд╕реИрдВрдб рдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЖрдк @bvaughn рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ
рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://codesandbox.io/s/sweet-sea-irxl8
рдЕрдм рд╕реВрдЪреА рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрднреА рд╕рд┐рдХреБрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрд░реНрде:
рдЗрд╕рдиреЗ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЙрдард╛рдпрд╛, рдореИрдВрдиреЗ рд╕реИрдВрдб рдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЖрдк @bvaughn рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ
рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://codesandbox.io/s/sweet-sea-irxl8рдЕрдм рд╕реВрдЪреА рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрднреА рд╕рд┐рдХреБрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрд░реНрде:
- рдпрджрд┐ рдореИрдВ 6 рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
- 20 рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ, рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕рднреА рдЕрдЪреНрдЫреЗред
- рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд╛рдкрд╕ 6 рдЖрдЗрдЯрдо рдореЗрдВ рдмрджрд▓реЗрдВ, рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдо рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рд╕рдлреЗрдж рд╕реНрдерд╛рди рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдкрд┐рдЫрд▓реА рд╕рд╛рдордЧреНрд░реА (20 рдЖрдЗрдЯрдо рдбреЗрдЯрд╛ рд╕реЗрдЯ) рд╕реЗ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдореБрдЭреЗ рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ
рдореБрдЭреЗ рдареАрдХ рдЗрд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдореИрдВрдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб-рдСрдЯреЛ-рд╕рд┐рдЬрд╝рд░ рдФрд░ рд░рд┐рдПрдХреНрд╢рди-рд╡рд┐рдВрдбреЛ-рдЗрди-рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ 1.6.0-рдЕрд▓реНрдлрд╛.1 рд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХрд╕рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИред
рдХреБрдЫ рднреА рдореИрдВ рдЗрд╕ рдХрджрдо рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдирдорд╕реНрдХрд╛рд░ @bvaughn , рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ https://github.com/bvaughn/react-window/issues/6#issuecomment -509213284 рд╕реЗ рдХреЛрдбреЗрдВрдбрдмреЙрдХреНрд╕ рдЪреЗрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ?
рдирдорд╕реНрддреЗ, рдореИрдВ рдЕрдкрдиреЗ рдЪреИрдЯ рдРрдк рдХреЗ рд▓рд┐рдП DynamicsSizeList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдХрдорд╛рд▓ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп, CPU рд╣рдореЗрд╢рд╛ рдЙрдЧрддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ 100% рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ?
import { useChatList } from '../../../hooks/chat/useChatList';
import LoadingSpinner from '../../../utils/LoadingSpinner';
import dynamic from 'next/dynamic';
import * as React from 'react';
import AutoSizer from 'react-virtualized-auto-sizer';
// @ts-ignore
import { DynamicSizeList as List } from 'react-window';
import { Message } from 'src/app/typings';
const { useRef, useCallback } = React;
const RowItem = React.memo(
({ forwardedRef, style, index, data }: any) => {
const item = data[index] as Message;
if (item) {
return (
<div id={item.messageId} ref={forwardedRef} style={style}>
{item.text && item.text.plainText}
</div>
);
}
return null;
},
(prevProps, newProps) => {
const { index, data } = prevProps;
const { index: newIndex, data: newData } = newProps;
let isMemo = true;
isMemo = isMemo && index === newIndex;
isMemo = isMemo && data.length === newData.length;
return isMemo;
}
);
function ChatList() {
const listRef = useRef<HTMLInputElement>();
const { formatMessages: messages, isLoadingMessages } = useChatList();
const keyCreator = useCallback((index: number) => `ChatList/RowItem/${messages[index].messageId}`, [messages]);
if (isLoadingMessages && (!messages || messages.length <= 0)) {
return <LoadingSpinner />;
}
return (
<div style={{ flex: 1, height: '100%', width: '100%' }}>
<AutoSizer>
{({ height, width }) => (
<List
ref={(lref: HTMLInputElement) => {
if (lref !== null) {
listRef.current = lref;
}
}}
itemCount={messages.length}
itemData={messages}
itemKey={keyCreator}
height={height}
width={width}
overscanCount={10}
>
{React.forwardRef((props, ref) => (
<RowItem forwardedRef={ref} {...props} />
))}
</List>
)}
</AutoSizer>
</div>
);
}
export default ChatList;
рдирдорд╕реНрдХрд╛рд░ @bvaughn , рдЕрдЪреНрдЫрд╛ рдХрд╛рдо!
рдХрд╛рд░реНрдпрд╕реНрдерд▓ рдХреЛ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдкрд░ рдЖрдЗрдЯрдо рд╣рд╛рдЗрдЯреНрд╕ рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдКрдкрд░ рджрд┐рдП рдЧрдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рдореИрдВ рдХреБрдЫ рдбреЗрдореЛ https://codesandbox.io/s/angry-hill-tcy2m рдмрдирд╛рддрд╛ рд╣реВрдВ
рдЬрдм рдорд╛рдЙрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╕реНрдерд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ рдмрджрд▓ рд░рд╣реА рд╣реИ, рддреЛ рдореБрдЭреЗ рд╕рднреА рдЖрдЗрдЯрдо рдКрдВрдЪрд╛рдИ (рдФрд░ рд╡реИрд░рд┐рдПрдмрд▓рд╕рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдШрдЯрдХ рдХреА рдЖрдВрддрд░рд┐рдХ рдКрдВрдЪрд╛рдИ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ) рдХреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
рдХреНрдпрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдм рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╕рд┐рд░реНрдл 4 рдШрдВрдЯреЗ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ i рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрджрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрдкрд╛рдп рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХреЛрдИ "рдЖрдк рд▓реЛрдЧ" рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╣реА рджрд┐рди рдореЗрдВ рдХрдИ рдореБрджреНрджреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЫреЛрдбрд╝рдирд╛ рдЕрд╕рдВрдЧрдд рд╣реИред рд╣рд░ рддрд░рд╣ рд╕реЗ, рдХреГрдкрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореБрдЭреЗ рдЗрд╕ рдмреНрд░рд╛рдпрди рдХреА рддрд░рд╣ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреЗрдж рд╣реИред рдореБрдЭреЗ рдпрд╣ рдореБрджреНрджрд╛ рдмрд╛рдж рдореЗрдВ рдорд┐рд▓рд╛ рдФрд░ рдлрд┐рд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдХрдо рд╕реЗ рдХрдо рдЖрдкрдХреА рдорджрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ
@ рд╢рд┐рд╡рдо рдЬреЛрдХрд░ рдореБрдЭреЗ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рдХреБрд▓ рдКрдВрдЪрд╛рдИ рд╣реИ рдЬреЛ рдмрдврд╝рддреА рд░рд╣рддреА рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдо рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрднреА рд╕рд┐рдХреБрдбрд╝рддреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
@bv рдмреЗрдЯрди рдХреЗ рдкрд╛рд╕ https://github.com/bvaughn/react-window/issues/6#issuecomment -509213284 рд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛?
=> https://codesandbox.io/s/sweet-sea-irxl8
рдпрд╣ рдЫреЛрдЯреА рд╕реВрдЪреА рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП:
Show Long List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВShow Short List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВрдзрдиреНрдпрд╡рд╛рдж!
@ рд╢рд┐рд╡рдо рдЬреЛрдХрд░ рдореБрдЭреЗ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рдХреБрд▓ рдКрдВрдЪрд╛рдИ рд╣реИ рдЬреЛ рдмрдврд╝рддреА рд░рд╣рддреА рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдо рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрднреА рд╕рд┐рдХреБрдбрд╝рддреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
@bvaughn рдХреЗ рдкрд╛рд╕ # 6 (рдЯрд┐рдкреНрдкрдгреА) рд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛?
=> https://codesandbox.io/s/sweet-sea-irxl8
рдпрд╣ рдЫреЛрдЯреА рд╕реВрдЪреА рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП:
- рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ
- рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░
Show Long List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ- рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ
- рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░
Show Short List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ- рдЕрдВрдд рдореЗрдВ рдПрдХ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЫреЛрдЯреА рд╕реВрдЪреА рдЕрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреА рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
рд╣рд╛рдБ, рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ / рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЗрд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
@ рд╢рд┐рд╡рдо рдЬреЛрдХрд░ рдореБрдЭреЗ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рдХреБрд▓ рдКрдВрдЪрд╛рдИ рд╣реИ рдЬреЛ рдмрдврд╝рддреА рд░рд╣рддреА рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдо рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрднреА рд╕рд┐рдХреБрдбрд╝рддреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
@bvaughn рдХреЗ рдкрд╛рд╕ # 6 (рдЯрд┐рдкреНрдкрдгреА) рд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛?
=> https://codesandbox.io/s/sweet-sea-irxl8
рдпрд╣ рдЫреЛрдЯреА рд╕реВрдЪреА рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП:
- рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ
- рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░
Show Long List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ- рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ
- рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░
Show Short List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ- рдЕрдВрдд рдореЗрдВ рдПрдХ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЫреЛрдЯреА рд╕реВрдЪреА рдЕрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреА рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
рдзрдиреНрдпрд╡рд╛рдж рдореИрдВ рдЗрд╕реЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЙрдореНрдореАрдж рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ
рдФрд░ рд╣рд╛рдВ рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рд╕рд╛рде рдКрдВрдЪрд╛рдИ рдХрд╛ рдореБрджреНрджрд╛
@ graphee-gabriel рд▓реЗрдХрд┐рди рдореИрдВ рднреА рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдРрдк рдмрд╛рд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдбрд╛рдЙрди рдкрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЕрдм рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдЕрдЪреНрдЫрд╛ рджрд┐рдиред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ DinamycSizeList рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд╕рдм рдХреБрдЫ рдареАрдХ рдерд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕реВрдЪреА рдШрдЯрдХ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдкрд╣рд▓реЗ рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЦрд┐рдбрд╝рдХреА рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдбреЗрдореЛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП
https://react-window-next.now.sh/#/examples/list/dynamic -size
рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрддреАрдд рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдХреНрдпрд╛ рдЖрдк рдЗрди рдмрдЧреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
@ рд╢рд┐рдореЛрдиреЛрдлрд╝
рд╣рд╛рдБ, рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ / рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЗрд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд░рд╛рдЬреНрдп рдХреА рдКрдВрдЪрд╛рдИ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди ?
@ рд╢рд┐рдореЛрдиреЛрдлрд╝
рд╣рд╛рдБ, рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрдВрдЯреЗрдирд░ рдХреЛ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ / рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЗрд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд░рд╛рдЬреНрдп рдХреА рдКрдВрдЪрд╛рдИ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди ?
рдЗрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
@ рд╢рд┐рд╡рдо рдЬреЛрдХрд░ рдореБрдЭреЗ рд▓рдЧрднрдЧ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рдХреБрд▓ рдКрдВрдЪрд╛рдИ рд╣реИ рдЬреЛ рдмрдврд╝рддреА рд░рд╣рддреА рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрдо рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдХрднреА рд╕рд┐рдХреБрдбрд╝рддреА рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
@bvaughn рдХреЗ рдкрд╛рд╕ # 6 (рдЯрд┐рдкреНрдкрдгреА) рд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛?
=> https://codesandbox.io/s/sweet-sea-irxl8
рдпрд╣ рдЫреЛрдЯреА рд╕реВрдЪреА рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП:
- рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ
- рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░
Show Long List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ- рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ
- рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░
Show Short List
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ- рдЕрдВрдд рдореЗрдВ рдПрдХ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЫреЛрдЯреА рд╕реВрдЪреА рдЕрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреА рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж!
рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
https://codesandbox.io/s/blissful-voice-mzjsc
рдирдорд╕реНрдХрд╛рд░ @bvaughn рдЖрдкрдХреЛ рдЗрд╕ рднрдпрд╛рдирдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЬрд░реВрд░рдд рд╕реЗ рдмрд╛рд╣рд░ рдореИрдВ рдХреБрдЫ рд╕рдордп рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕рд▓рд┐рд╕реНрдЯ рдХреЛрдб рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕реАрдорд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╣реАрдВ рднреА рд╕реНрдХреНрд░реЙрд▓ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдХрд┐рд╕реА рднреА рдЖрдЗрдЯрдо рдХреЛ рдХреИрд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдорд╛рдкрд╛ рдФрд░ рдирд╣реАрдВред
рдореИрдВ рдРрд╕рд╛ рдпрд╣рд╛рдВ рдХрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ https://github.com/bvaughn/react-window/compare/issues/6...Sauco82 : рдореБрджреНрджреЛрдВ / 6 рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рд╣реЛ рд░рд╣реА рджреНрд╡рд╛рд░рд╛ lastMeasuredIndex
рдФрд░ рд╕рд╛рде рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐ рдЖрдЗрдЯрдо рдХреА рдЬрд╛рдБрдЪ itemIsMeasured
, рдЬреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдмрджрд▓реЗ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдХрднреА рднреА рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рди рд╣реА рдлреНрд▓реЛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рди рд╣реА рдЕрдЧрд░ рдореБрдЭреЗ рд╕реАрдзреЗ рдкреАрдЖрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдорджрдж рдХрд░рдиреЗ рдФрд░ рдЯреНрд╡рд┐рд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдЕрд░реЗ, рдпрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ (рдЙрдирдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдУрдПрдо рдХреЛ рднреВрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ):
рдХреЛрдбреНрд╕рдмреЙрдХреНрд╕
рдЕрд░реЗ, рдпрд╣рд╛рдБ рдмрд╣реБрдд рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рд╣реИ (рдЙрдирдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдУрдПрдо рдХреЛ рднреВрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ):
рдХреЛрдбреНрд╕рдмреЙрдХреНрд╕
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдиреМрдХрд░реАред
@ Kashkovsky рдЧрдгрдирд╛ рдЖрдХрд╛рд░ рдерд╛ рдЕрдЧрд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдФрд░ рдЖрдЗрдЯрдо рдХреЛ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд░реЗрдВ
@ userbq201 @ рдХрд╢рдХреЛрд╡рд╕реНрдХреА рдХреЛ рдмрд╣реБрдд рдХрд╛рдо! рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдореБрдЭреЗ ChatHistory.js
рдХрд╛ рдХреЛрдб рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛:
const listRef = useRef(); // added
const sizeMap = useRef({});
const setSize = useCallback((index, size) => {
sizeMap.current = {...sizeMap.current, [index]: size};
listRef.current.resetAfterIndex(index); // added
}, []);
const getSize = useCallback(index => sizeMap.current[index] || 60, []);
// ...
<List ref={listRef}
рдЕрдиреНрдпрдерд╛ рд╕рднреА рдЖрдЗрдЯрдо рдПрдХ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рд╕рдордЭрд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдВрддрд░ рдХреНрдпреЛрдВ рд╣реИ ... рд╢рд╛рдпрдж @ рдмреАрд╡реЙрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@bvaughn рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ SSR рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реИ? рдЙрд╕ рддрд░рдл рдХреЛрдИ рдЗрд╢рд╛рд░рд╛?
@bvaughn рдпрд╣ рдореИрдВ рд╣реВрдВ рдпрд╛ рдЖрдкрдХрд╛ рдбреЗрдореЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди @Kashkovsky @ kirill-konshin рдФрд░ @ userbq201 !
рдЖрдк рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдорд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ?
рдореИрдВ рдПрдХ рдореЗрдВ рд░реИрдкрд┐рдВрдЧ ChatMessage рдХреА рдХреЛрд╢рд┐рд╢ рдХреА memo
рдХреЗ рд╕рд╛рде areEqual
, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрднреА рднреА рдлрд┐рд░ рд╕реЗ renders рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рд╣рд░ рдмрд╛рд░ рд╕рдВрджреЗрд╢ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрд░реЗ рдЕрдиреНрдп рдлрд┐рдХреНрд╕реНрдбрд▓рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯреНрд╕ рдореЗрдВ, рдЬреНрдЮрд╛рдкрди рдЙрд╕ рдЬреНрдЮрд╛рдкрди / areEqual рдЖрд╡рд░рдг рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж ref={root}
рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд░рд┐рдПрдХреНрдЯ рдЪрд┐рдкрдХреЗ рд╣реБрдП рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣рд╛рдБ рд╕рд┐рд░реНрдл рдкрд╛рда рдХреЗ рдмрдЬрд╛рдпред
рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛: https://codesandbox.io/s/dynamic-size-of-react-window-list-items-nb038
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рд╕рдВрд╕реНрдорд░рдг рддрдп рдХрд┐рдпрд╛ - рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЛ рдореЗрдореЛ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ - рдирд╣реАрдВ
EDIT 2: рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди resetAfterIndex
рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдореЗрд░рд╛ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЕрд▓рдЧ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЕрд╕рд▓реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ resetAfterIndex
рдирдП setSize
рдЦрддреНрдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЪрд▓рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рддреЛ рдпрд╣ рдХреИрд╢реНрдб рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреНрд▓рд┐рдпрд░ рдХрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рдлрд┐рд░ рд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдХреИрд╢ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд░ рдиреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рджреЛрдмрд╛рд░рд╛ рд╕рд╛рдЗрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд┐рди рдбрд╛рд▓рдиреА рд╣реИред рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рднреА рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрджреНрдпрддрди рдКрдВрдЪрд╛рдИ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕реЗ рдЕрдиреНрдп рд░рд┐рдПрдХреНрд╢рди-рд╡рд┐рдВрдбреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред
EDIT 3: рдпрд╣ рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рд╕рдВрдкрд╛рджрди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЖрдЦрд┐рд░рдХрд╛рд░ рдПрдХ рд╕реЗрдореА-рдПрд▓рд┐рдЧреЗрдВрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВред
1.) рдпрджрд┐ рдЖрдЗрдЯрдордбреИрдЯ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ (рдпрд╛рдиреА рдЬрдм рдмрд╛рддрдЪреАрдд рдмрджрд▓ рд░рд╣реА рд╣реИ), рдкреВрд░реЗ рдХреЛ рдЕрдирдорд╛рдЙрдВрдЯ рдХрд░реЗрдВ
2.) рдореИрдВрдиреЗ {sizeMap, setSize, listRef}
ChatMessage
ChatContext
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рддрд░рд╣, рдХреЗрд╡рд▓ рдЖрдХрд╛рд░ рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЪреИрдЯрдореИрд╕реЗрдЬ рдХреЛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреБрд░рд╛рдиреЗ рдЖрдХрд╛рд░ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВред рдпрджрд┐ рдкреБрд░рд╛рдирд╛ рдЖрдХрд╛рд░ рдирдП рдЖрдХрд╛рд░ рд╕реЗ рднрд┐рдиреНрди рд╣реИ, рддреЛ resetAfterIndex
рдХреЛ index
рдФрд░ рдЕрджреНрдпрддрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред
рддреЛ рдореЗрд░рд╛ рдирдпрд╛ рдЪреИрдЯрдореИрд╕реЗрдЬ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const ChatMessage = ({ message, index }) => {
const { setSize, sizeMap, listRef } = useContext(ChatContext);
const root = React.useRef();
useEffect(() => {
let oldSize = sizeMap[index];
let newSize = root.current.getBoundingClientRect().height;
setSize(index, newSize);
if(newSize !== oldSize){
listRef.current.resetAfterIndex(index,true);
}
}, [sizeMap, setSize, listRef]);
return (
<div ref={root}
{message.body}
</div>
);
};
export default ChatMessage;
3.) рдореИрдВрдиреЗ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╢реНрд░реЛрддрд╛ рдХреНрдпрд╛ рд╣реИ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ред рдПрдХ рдмрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдпрд╣ рдиреАрдЪреЗ рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдХреНрд░реЙрд▓рдкрдЯреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рдХрдВрдкреЛрдиреЗрдВрдЯрдорд╛рдЙрдВрдЯ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЙрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рдкрд╣рд▓реЗ рдХрднреА рднреА рд░реЗрдВрдбрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП
class Chat extends Component {
constructor(props) {
super(props);
this.listRef = createRef();
this.state = {
initialScrollComplete: false,
interval: null
};
}
componentDidMount(){
// Create interval to check if list is ready. Once ready, scroll to bottom of list.
this.setState({interval: setInterval(()=>{
if(this.listRef.current && !this.state.initialScrollComplete){
this.listRef.current.scrollToItem(this.props.chatHistory.length - 1, "end");
this.setState({initialScrollComplete: true});
}
},25)});
}
componentDidUpdate(prevProps, prevState) {
// Clear interval if scroll has been completed
if(!prevState.initialScrollComplete && this.state.initialScrollComplete){
clearInterval(this.state.interval);
this.setState({interval: null});
}
// If new message is transmitted, scroll to bottom
if(prevProps.chatHistory && this.props.chatHistory && prevProps.chatHistory.length !== this.props.chatHistory.length){
this.listRef.current.scrollToItem(this.props.chatHistory.length - 1, "end");
}
}
render() {
return <ChatHistory listRef={this.listRef} chatHistory={this.props.chatHistory}/>;
}
}
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдлрд╛рд░реА рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред
рдбрд╛рдпрдирд╛рдорд┐рд╕реЗрд▓рд╛рдЗрдЬреНрдб рд▓рд┐рд╕реНрдЯ рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдКрдВрдЪрд╛рдИ рдпрд╛ рдорд╛рд░реНрдЬрд┐рди-рдЯреЙрдк рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рдордЧреНрд░реА рдУрд╡рд░рд▓реИрдк рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИред
рдЬрдм рдкрдВрдХреНрддрд┐ рдХреА рд╡рд┐рдВрдбреЛ рдЪреМрдбрд╝рд╛рдИ / рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддреА рд╣реИ, рддреЛ рдирдИ рдКрдВрдЪрд╛рдИ рд╕рд╛рдордЧреНрд░реА рдХреА рдирдИ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдЧрдгрдирд╛ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ рдЕрдЧрд░ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЬрд╣рд╛рдВ рдкрдВрдХреНрддрд┐ рдЕрдм рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ, рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдкрд╣рд▓реЗ рдкреГрд╖реНрда рд▓реЛрдб рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ: /
рдпрд╣ рд╕рдм рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕рд╣рд┐рдд рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдлрд╛рд░реА рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдРрдк рдХреЛ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдорджрдж рдХрд╛ рд╡рд╛рдХрдИ рдХреБрдЫ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛!
@tastyqbit рдореИрдВ рд╕рдлрд╛рд░реА рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкрдВрдХреНрддрд┐ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓ рдЬрд╛рдП рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ!
@afreix @tastyqbit рдореИрдВ рд╕рдлрд╛рд░реА рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдкрд░ рдЖрдкрдХреЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рдХрд╛рдлреА MDN рджреЗрдЦреЗрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ResizeObserver рдХреА рдХрдореА рд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ https://codesandbox.io/s/agitated-jennings-o9nn6 рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдмреБрдирд┐рдпрд╛рджреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ VariableSizeList + # 102 рд╕реЗ ItemMeasurer рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рднреЛрд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ) рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ ize
рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рд╣рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рдкрд╛рда рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рд╕реВрдЪреА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд▓реИрдЧ рдХреЗ рдмрд┐рдирд╛ рдЖрдЗрдЯрдо рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рдмреАрдЪ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдХреВрджрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЬрд░реВрд░реА рдереАред
рдХрд╛рдлреА рдСрдирд▓рд╛рдЗрди рдЦреЛрдЬ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рд╣рд╛рд░ рдорд╛рди рд▓реА рдФрд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓рд┐рдЦ рд▓рд┐рдпрд╛ред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: smile_cat:
рдЕрд░реЗ,
рдмрд╕ рдпрд╣ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдХреБрдЫ рдХрд╛рдо рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╕рднреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдЖрдЗрдЯрдо рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
@ gnir-work рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдмрджрд▓ рджреЗрддреА рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕реВрдЪреА рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ?
рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЪреМрдбрд╝рд╛рдИ рд╣реИ рдЬреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИред
рдпрд╣рд╛рдБ 'рдЪрд░' рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреВрд░реЗ рд╕реЗрдЯ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрдерд┐рд░ рд╣реИ, рдЧрддрд┐рд╢реАрд▓ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдореНрдпреВрдЯреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдкрд╛рда рдмрджрд▓рддрд╛ рд╣реИред
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирдирд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрд╢рд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд╣реА рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред + - 20% рдареАрдХ рд╣реИред
рд╣рдо рдХреЗрд╡рд▓ рд╡реЗ рдЖрдЗрдЯрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджреГрд╢реНрдпрдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ + 20% рдЕрдзрд┐рдХ рдХрд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗ рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рди рджреЗ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ 'рднреВрдд' рд╣реИ, рдЬрд┐рд╕рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдКрдВрдЪрд╛рдИ 'рд╕реЗрдЯ' рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд╛рд▓реА рддрд▓рд╛рдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рджрд╛рдИрдВ рдУрд░ рджрд┐рдЦрддрд╛ рд╣реИред
рдПрдХ рдЖрдЗрдЯрдо рдХреЗрд╡рд▓ рддрдм рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рднреВрдд рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдХреА рдКрдВрдЪрд╛рдИ рдереЛрдбрд╝реА рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред рд╕реНрдХреНрд░реЙрд▓ рд╕реВрдЪреА рдмрдбрд╝реА рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдмрдлрд░ рдХреЛ рдмрдврд╝рд╛рдХрд░ / рдШрдЯрд╛рдХрд░ рдЗрд╕реЗ рдЫрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
@ gnir-work рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдмрджрд▓ рджреЗрддреА рд╣реИ рдФрд░ рдХрдВрдЯреЗрдирд░ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╕реВрдЪреА рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ?
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг ( 2.2.0
) рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХ рдкреВрд░реА рд╕реВрдЪреА (рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ) рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЪреМрдбрд╝рд╛рдИ рд╣реИ рдЬреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИред
рдпрд╣рд╛рдБ 'рдЪрд░' рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкреВрд░реЗ рд╕реЗрдЯ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЖрдХрд╛рд░ рд╕реНрдерд┐рд░ рд╣реИ, рдЧрддрд┐рд╢реАрд▓ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдХ рдмреЗрд╣рддрд░ рд╢рдмреНрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдореНрдпреВрдЯреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдкрд╛рда рдмрджрд▓рддрд╛ рд╣реИред
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдЕрднрд┐рднрд╛рд╡рдХ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирдирд╛ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:
- рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрд╢рд▓ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд╣реА рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред + - 20% рдареАрдХ рд╣реИред
- рд╣рдо рдХреЗрд╡рд▓ рд╡реЗ рдЖрдЗрдЯрдо рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджреГрд╢реНрдпрдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ + 20% рдЕрдзрд┐рдХ рдХрд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗ рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рди рджреЗ
- рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ 'рднреВрдд' рд╣реИ, рдЬрд┐рд╕рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдКрдВрдЪрд╛рдИ 'рд╕реЗрдЯ' рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЦрд╛рд▓реА рддрд▓рд╛рдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рджрд╛рдИрдВ рдУрд░ рджрд┐рдЦрддрд╛ рд╣реИред
- рдПрдХ рдЖрдЗрдЯрдо рдХреЗрд╡рд▓ рддрдм рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рднреВрдд рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдХреА рдКрдВрдЪрд╛рдИ рдереЛрдбрд╝реА рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред рд╕реНрдХреНрд░реЙрд▓ рд╕реВрдЪреА рдмрдбрд╝реА рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдмрдлрд░ рдХреЛ рдмрдврд╝рд╛рдХрд░ / рдШрдЯрд╛рдХрд░ рдЗрд╕реЗ рдЫрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ @bvaughn рджреНрд╡рд╛рд░рд╛ react-virtualized
рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореБрдЦреНрдп рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреВрджрдиреЗ рд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рджреГрд╢реНрдп рдХреАрдбрд╝реЗ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред
@ gnir- рдХрд╛рдо рдЖрд╣ .. рдареАрдХ рд╣реИ ... рд╢рд╛рдпрдж рдореИрдВ рдЕрдкрдирд╛ рдХрд╛рдо рдЫреЛрдбрд╝ рджреВрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рджрд┐рдЦреВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдП рдЧрдП рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ 'рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░' рдХреЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдШрдЯрдХ рдХреЗ рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
... рд▓реЗрдХрд┐рди рдкрд╛рдареНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдШрдЯрдХ рдХреА рдКрдВрдЪрд╛рдИ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдпрджрд┐ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рд╕рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдПрдХ рдЖрднрд╛рд╕реАрдХреГрдд рд╕реВрдЪреА рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЬрдм рддрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рд╕рдЯреАрдХ рдерд╛ рддрдм рддрдХ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдЕрдиреНрдпрдерд╛ рд╕реНрдХреНрд░реЙрд▓ рдЯреВ рд░реЛ рдлрдВрдХреНрд╢рдирд▓рд┐рдЯреА рдореЗрд░реЗ рдРрдк рдХреЛ рддреЛрдбрд╝ рджреЗрдЧреА functionality
рд╡рд┐рдВрдбреЛрдЬ 10 рдХреЗ рд▓рд┐рдП рдореЗрд▓ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
рдкреНрд░реЗрд╖рдХ: рдХреЗрд╡рд┐рди рдмрд░реНрдЯрди
рдкреНрд░реЗрд╖рд┐рдд: рдордВрдЧрд▓рд╡рд╛рд░, 14 рдЕрдкреНрд░реИрд▓ 2020 23:07
To: bvaughn / reaction-window
Cc: Nir Geller; рдЙрд▓реНрд▓реЗрдЦ
рд╡рд┐рд╖рдп: рдкреБрди: [рдмреАрд╡реАрдПрдирдПрди / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЦрд┐рдбрд╝рдХреА] рд╕рдорд░реНрдерди рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рдкреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА (# рем)
@ gnir- рдХрд╛рдо рдЖрд╣ .. рдареАрдХ рд╣реИ ... рд╢рд╛рдпрдж рдореИрдВ рдЕрдкрдирд╛ рдХрд╛рдо рдЫреЛрдбрд╝ рджреВрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рджрд┐рдЦреВрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдП рдЧрдП рдореБрджреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ 'рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░' рдХреЗ рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдШрдЯрдХ рдХреЗ рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
... рд▓реЗрдХрд┐рди рдкрд╛рдареНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдШрдЯрдХ рдХреА рдКрдВрдЪрд╛рдИ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
-
рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред
-
рдЗрд╕ рдИрдореЗрд▓ рдХреЛ Avast рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдпрд░рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪрд╛ рдЧрдпрд╛ рд╣реИред
https://www.avast.com/antivirus
@ gnir- рдХрд╛рдо рдЖрд╣ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ 'рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ' рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИ .. рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдБред
рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП for
рд╡рд┐рдВрдбреЛрдЬ 10 рдХреЗ рд▓рд┐рдП рдореЗрд▓ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛
рдкреНрд░реЗрд╖рдХ: рдХреЗрд╡рд┐рди рдмрд░реНрдЯрди
рдкреНрд░реЗрд╖рд┐рдд: рдордВрдЧрд▓рд╡рд╛рд░, 14 рдЕрдкреНрд░реИрд▓ 2020 23:13
To: bvaughn / reaction-window
Cc: Nir Geller; рдЙрд▓реНрд▓реЗрдЦ
рд╡рд┐рд╖рдп: рдкреБрди: [рдмреАрд╡реАрдПрдирдПрди / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЦрд┐рдбрд╝рдХреА] рд╕рдорд░реНрдерди рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рдкреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА (# рем)
@ gnir- рдХрд╛рдо рдЖрд╣ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ 'рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ' рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИ .. рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдБред
-
рдЖрдк рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред
-
рдЗрд╕ рдИрдореЗрд▓ рдХреЛ Avast рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдпрд░рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪрд╛ рдЧрдпрд╛ рд╣реИред
https://www.avast.com/antivirus
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдпрджрд┐:
рдЖрдк CanvasRenderingContext2D.measureText () рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдВрдХреНрддрд┐ рдКрдВрдЪрд╛рдИ рдХреА рдЧрдгрдирд╛ рдкреВрд░реЗ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@bvaughn npm рдкрд░ рдПрдХ рдирдпрд╛ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ? 1.6.0-alpha.1
haven't рдХреЗ рдмрд╛рдж рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реИ
@bvaughn рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдХреНрдпрд╛ рдЗрд╕реЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?
DynamicSizeList
- рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╡рд░реНрджреНрдзрди рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ DynamicSizeList
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рдореЗрд░реА рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб)ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдиреБрд╕рд░рдг рдЬреЛрдбрд╝реЗрдВ:
import React, { Component } from 'react'
declare module 'react-window' {
export type DynamicSizeListProps = Omit<FixedSizeListProps, 'itemSize' | 'scrollToItem'>
export class DynamicSizeList extends Component<DynamicSizeListProps> {}
}
рдлрд┐рд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЖрдпрд╛рдд рдХрд░реЗрдВ:
import {
DynamicSizeList,
DynamicSizeListProps,
} from 'react-window'
// use as normal...
@types/react-window
рдЕрднреА рднреА FixedSizeListProps
рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЯрд╛рдЗрдкрд░рд╛рдЗрдлреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ! рдЕрдм рдореИрдВ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдареЗрд╕ рдореЗрдВ рдбрд╛рдпрдиреЗрдорд┐рдХрд╕рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рдХрд╛рдВрдЯреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░: "@john-osullivan/react-window-dynamic-fork": "^1.9.0-alpha.1"
(рдХреНрдпрд╛ рдпрд╣ рдЕрдм рддрдХ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЪреАрдЬрд╝ рд╣реИ?)ред рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рдХрд╛рд░рдг react-virtuoso
рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ / рдЬрдм рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рдкрд░рдлрд╝реЙрд░реНрдореЗрдВрдЯ рдкрд╛рдпрд╛ рдФрд░ w / рдпрд╣ рдЕрдЯрдХ рдЧрдпрд╛ред
@bvaughn рдЕрднреА рддрдХ рдпрд╣ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧрд╛рдпрдкрд╛ рдХреЛ рдкреНрд░рд╢рд╕реНрдд рдХрд░реЗ рдФрд░ рдЗрд╕реЗ npm рдкрд░ рдЬрд╛рд░реА рдХрд░реЗ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА рдЗрд╕рдХреЗ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рддреЛ рд╕рд┐рд░реНрдл ExperimentalDynamicSizeList
рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛рдПред
рд╣реИрд▓реЛ рджреЛрд╕реНрддреЛрдВ! рдЖрдкрдХреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдФрд░ рдЗрд╕ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ! рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪрдирд╛ рдХреЛ README рдФрд░ рдкреНрд░рд▓реЗрдЦрди / рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧ рдЧрдпрд╛ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рд╢реНрдЪрд┐рдд / рдЬреНрдЮрд╛рдд рдЖрдХрд╛рд░ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ README рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ FAQ рд╕реЗрдХреНрд╢рди рд╣реИ рдЬрд╣рд╛рдБ рдЗрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдПрдХ рдореЗрдЬ / рдЧреНрд░рд┐рдб / рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╢реБрд░реВ рд╣реЛрдЧрд╛ https://autodesk.github.io/react-base-table/examples/dynamic-row-heights , рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ VariableSizeGrid
@ tony-scio рдХреНрдпрд╛ рдЖрдк InfiniteLoader рдХреЗ рд╕рд╛рде 1.6.0-Alpha.1 рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХрд╕рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрд┐рдВрдЧ рдХреЛрдбреИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕реБрдВрджрд░-dnd рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ? рдЦреАрдВрдЪрдиреЗ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рд╕реЗ рдХреВрдж рд░рд╣реЗ рд╣реИрдВред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕реБрдВрджрд░-dnd рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ? рдЦреАрдВрдЪрдиреЗ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рд╕реЗ рдХреВрдж рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рднреА рдЗрд╕ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реВрдВрдЧрд╛: D
[рд╣ рдорджрдж]
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рд╢реЛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реИ:
рдЧрддрд┐рд╢реАрд▓-рдЖрдХрд╛рд░-рд╕реВрдЪреА-рдКрд░реНрдзреНрд╡рд╛рдзрд░
рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж
[рд╣ рдорджрдж]
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рд╢реЛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реИ:
рдЧрддрд┐рд╢реАрд▓-рдЖрдХрд╛рд░-рд╕реВрдЪреА-рдКрд░реНрдзреНрд╡рд╛рдзрд░
рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж
https://react-window-next.now.sh/#/examples/list/dynamic -size
рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди? рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдЖрдЗрдЯрдореЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рдЙрддреНрддрд░рджрд╛рдпреА рдЧреНрд░рд┐рдб рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ (рдЙрдирдХреА рд╣рд╛рдЗрдЯ рдЧрддрд┐рд╢реАрд▓ рд╣реИрдВ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рда рдЖрд╡рд░рдг рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧреА)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ react-window
рдПрдХ рдЧреЗрдо рдЪреЗрдВрдЬрд░ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ?
рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди? рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдмрд╣реБрдд рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдЖрдЗрдЯрдореЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рдЙрддреНрддрд░рджрд╛рдпреА рдЧреНрд░рд┐рдб рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ (рдЙрдирдХреА рд╣рд╛рдЗрдЯ рдЧрддрд┐рд╢реАрд▓ рд╣реИрдВ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рда рдЖрд╡рд░рдг рдЖрджрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧреА)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
react-window
рдПрдХ рдЧреЗрдо рдЪреЗрдВрдЬрд░ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ?
@JJJamie рдЪреВрдВрдХрд┐ рдЖрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдкреВрдЫрд╛ рдерд╛ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЧреБрдгрд╕реВрддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░: рдореИрдВ рдЗрд╕рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВред
@JJJamie рдЪреВрдВрдХрд┐ рдЖрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдкреВрдЫрд╛ рдерд╛ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЧреБрдгрд╕реВрддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЧрддрд┐рд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░: рдореИрдВ рдЗрд╕рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЧреБрдгрд╕реВрддреНрд░ рднреА рдЕрднрд┐рдХреНрд░рд┐рдпрд╛-рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рджреЛрдЧреБрдирд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдЖрдХрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
https://bundlephobia.com/[email protected]
https://bundlephobia.com/[email protected]
рдореИрдВрдиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рдпрд╛ рдКрд░реНрдЬрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рднреА рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рд╢рд╛рдЦрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛, рддреЛ рдореИрдВ рдЖрдкрдХреА рдорджрдж рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдБред (рдХреГрдкрдпрд╛ рдпрд╣ рднреА рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ List
рдФрд░ Grid
рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рджреЛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ # 302 рд╣реИред)
рд╣рдордиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рджреГрд╢реНрдпрддрд╛ рд╕реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реЗ OSS рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЪреАрд░ рдХрд░ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдПрдХ рдЪрд╛рд▓ рд╣реИ рдХрд┐ рд╣рдо 'рдмреНрд▓реЙрдХ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдмрдврд╝рд╛ рд╕рдХреЗрдВред рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ 25 рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдореВрд▓ рдмреНрд▓реЙрдХ рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддрдм рд╕реНрд╡реИрдк рдХрд░рддреЗ рд╣реИрдВред
@burtonator рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
рдХреНрдпрд╛ рдХреЛрдИ рдбрд╛рдпрдирд╛рдорд┐рдХрд╕рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЪрдпрди рдХрд╛ рдмрдЧ-рдореБрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдореИрдВ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореБрдЭреЗ 2 рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВ (рдмрд┐рдирд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ):
style={position: absolute, left: 0, top: 0}
рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдмреИрдарддреЗ рд╣реИрдВредрджреЛрдиреЛрдВ рдХрд╛ рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХреНрд░реЛрдо рдкрд░ 1.9.0 рдХрд╛рдВрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдЫрд┐рдкреЗ рд╣реБрдП рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдКрдкрд░ рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ред https://github.com/bvaughn/react-window/issues/6#issuecomment -50901642222
рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХрд░рдг рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдЗрдЯрдо рдХреА рд╕реВрдЪреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╕реНрдХреНрд░реЙрд▓ рд▓рдЧрднрдЧ рдПрдХ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдКрдВрдЪрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдПрдХреНрд╕ рдкрд┐рдХреНрд╕рд▓ рдХреЛ "рд╕реНрдХреНрд░реЙрд▓ рдбрд╛рдЙрди" рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрдЬрд╛рдп, рдШрдЯрдХ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ N / 2 рдкрд░ рдЖрдзрд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЖрдЗрдЯрдо, рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ N-1 рдореЗрдВ рдирд┐рдЪрд▓реЗ рд░реЗрдВрдбрд░рд░ рдЖрдЗрдЯрдо рдкрд░ред
рдпрд╣ рд╕реВрдЪреА рдХреЗ рдордзреНрдп рдпрд╛ рдЕрдВрдд рддрдХ рд╕реАрдзреЗ рдЕрдВрдЧреВрдареЗ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд╕реНрдХреНрд░реЙрд▓ рдЕрдВрдЧреВрдареЗ рдХреА рд╢рд┐рдерд┐рд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЬрдм рдШрдЯрдХ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЕрднреА, рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ VariableSizeList рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрд╕рд░ рд╕реНрдХреНрд░реЙрд▓ рдердВрдм рдЪрд╛рд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХреЛрдИ "рдЖрдк рд▓реЛрдЧ" рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╣реА рджрд┐рди рдореЗрдВ рдХрдИ рдореБрджреНрджреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЫреЛрдбрд╝рдирд╛ рдЕрд╕рдВрдЧрдд рд╣реИред рд╣рд░ рддрд░рд╣ рд╕реЗ, рдХреГрдкрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред