React-window: рд╕рдорд░реНрдерд┐рдд рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рдкреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдордИ 2018  ┬╖  132рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: bvaughn/react-window

рдореМрдЬреВрджрд╛ рд╕реВрдЪреА рдФрд░ рдЧреНрд░рд┐рдб рдШрдЯрдХреЛрдВ рдореЗрдВ рд▓рд╛рдЧрдд рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдПрдВ (рдЬреИрд╕реЗ DynamicSizeList рдФрд░ DynamicSizeGrid )ред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдорд╡реАрдкреА

рдЗрд╕рдХрд╛ рдЖрд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдореЗрдВ CellMeasurer рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рд╕рд╛рдордЧреНрд░реА рдХреЗрд╡рд▓ рддрднреА рдорд╛рдкреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдХреЛрдИ рд╡рд░реНрддрдорд╛рди рдорд╛рдк рдореМрдЬреВрдж рди рд╣реЛред
  2. рдпрджрд┐ рдХреБрдЫ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдорд╛рдк рдХреЛ рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ) рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  3. рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдХреЗрд╡рд▓ рдЙрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдорд╛рдкрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмрд╛рдж рддреИрдирд╛рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рд▓рдХреНрд╖реНрдп

рдпрд╣ рдШрдЯрдХ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдКрдкрд░ рдХреА рддреАрд╕рд░реА рдмрд╛рдзрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдПрдХреНрд╕реЗрд╕ (рдЖрдЗрдЯрдо рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ рд╕реНрдХреНрд░реЙрд▓ рдСрдлрд╝рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдпрд╣ рдЪреИрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рдВрдбреЛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЙрддреНрдХреГрд╖реНрдЯ рдмрдирд╛ рджреЗрдЧрд╛ред

рдпрд╣ рднреА рдЖрдЗрдЯрдо рдЖрдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╕реНрдерд┐рддрд┐ рдФрд░ рдорд╛рдк рдХреИрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ ResizeObserver ( рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдорд╛рдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреИрд╢реНрдб рдорд╛рдк рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ рдФрд░ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ред

рдЙрдкрд░реНрдпреБрдХреНрдд рд╕рдВрднрд╡ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрдиреЗрдорд┐рдХ рд╕реВрдЪреА / рдЧреНрд░рд┐рдб рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдСрдлрд╕реЗрдЯ рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред ( рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдореЗрдВ "рд╕реНрдХреНрд░реЙрд▓ рдПрдВрдХрд░рд┐рдВрдЧ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХреБрдЫ рдЕрдЪреНрдЫреЗ рджреГрд╢реНрдп рд╣реИрдВред) рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  • estimatedItemSize рдкреНрд░реЛрдк рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрдорд╛рдирд┐рдд рдХреБрд▓ рдЖрдХрд╛рд░ред (рдпрд╣ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдореИрдкрд┐рдВрдЧ рдлрд╝рдЬрд╝реА рдирд╣реАрдВ рд╣реИред)

  • рдЬрдм рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирдП рдСрдлрд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдкрд┐рдЫрд▓реЗ рдСрдлрд╕реЗрдЯ рд╕реЗ рдХрд░реЗрдВред рдпрджрд┐ рдбреЗрд▓реНрдЯрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ , рддреЛ

screen shot 2018-06-10 at 11 58 38 am

  • рдЬрдм рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рдбреЗрд▓реНрдЯрд╛ рджрд╣рд▓реАрдЬ рд╕реЗ рдХрдо рд╣реИ ,

screen shot 2018-06-10 at 12 01 01 pm

рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдореБрдЦ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИ: рд╕реВрдЪреА рд╕реАрдорд╛рдУрдВ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдЗрдЯрдо рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ), рддреЛ рд╡реЗ рд╕рдВрднрд╡рддрдГ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрд╖реЗрддреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

  • рдЕрдВрдд рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреБрд▓ рдЕрдиреБрдорд╛рдирд┐рдд рдЖрдХрд╛рд░ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реЙрд▓ рдХреЛ рдЕрдВрдд рдХреЗ рдХрд░реАрдм рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред
  • рд╕реВрдЪреА рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдХрдард┐рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдХреЛ рдСрдлрд╕реЗрдЯ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ рдЕрднреА рднреА рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдСрдлрд╕реЗрдЯ рд╕реЗ рдЖрдЗрдЯрдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдФрд░ рджрд╣рд▓реАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕реВрдЪреА рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдкрд╛рд╕ рдПрдХ "рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░", (рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓ рдСрдлрд╝рд╕реЗрдЯ рдХреБрдЫ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рди рд╕реЗ рдХрдо рд╣реИ) рдЬреЛ рд╕реВрдЪреА рдХреЛ рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛрдВред рдЗрд╕ рдордЬрдмреВрд░ рдорд╛рдк рдХреА рд▓рд╛рдЧрдд рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рдорджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреАред
    screen shot 2018-06-10 at 5 04 42 pm

рдПрдХ рдорд╛рдорд▓рд╛ рдЬреЛ рдЕрднреА рднреА рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рдПрдВрдХрд░ рд╣реЛрдЧрд╛ рдЬреЛ "рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░" рдХреЗ рдмрд╛рд╣рд░ рд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реЙрд▓ рдЬреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрдХреНрд░реЙрд▓ рдЬрд╛рдирдХреА рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд╣рд▓реЗ рд╕реЗрд▓ рдХреЛ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
screen shot 2018-06-10 at 5 08 26 pm

ЁЯСЛ help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХреЛрдИ "рдЖрдк рд▓реЛрдЧ" рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рд░рдЦрд░рдЦрд╛рд╡ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдФрд░ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╣реА рджрд┐рди рдореЗрдВ рдХрдИ рдореБрджреНрджреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЫреЛрдбрд╝рдирд╛ рдЕрд╕рдВрдЧрдд рд╣реИред рд╣рд░ рддрд░рд╣ рд╕реЗ, рдХреГрдкрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╕рднреА 132 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдорд╡реАрдкреА рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рдкрд░ рдХрд╛рдо 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 рдкреИрдХреЗрдЬ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ?

https://codesandbox.io/s/5x8vlm0o7n

рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╡рд╛рд▓ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдЬрдЧрд╣ рд╣реИ, рддреЛ рдореБрдЭреЗ рдорд╛рдл рдХрд░рдирд╛ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдБред рддреЛ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

  • рдореИрдВрдиреЗ DynamicSizeList AutoResizer рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреБрджреЛрд╕!
  • рдореБрдЭреЗ рдРрд╕реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдкреВрд░рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд div рдЬреЛрдбрд╝рдХрд░) рдФрд░ рдкреАрдЫреЗ рд╣рдЯрдирд╛ред
  • рдореИрдВрдиреЗ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рднреА (рд░реАрдбреЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдЬреЛрдбрд╝рд╛ рд╣реИ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ / рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдирддрд╛ рд╣реИред
  • рдорд╕реНрддреА рднрд░рд╛ рд╕рд╛рдорд╛рди рд╢реБрд░реВред рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ / рд╡рд╛рдкрд╕реА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ!
  • рдпрджрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ / рд╡рд╛рдкрд╕ рд▓реЗрддрд╛ рд╣реВрдВ, рддреЛ рдкреАрдЫреЗ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИред рдЕрдЧрд░ рдореИрдВ рдлрд┐рд░ рд╕реЗ рд╡рд╛рдкрд╕реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдВрдЦреНрдпрд╛ рдЖрдзреА рд╣реЛ рдЬрд╛рддреА рд╣реИред
    (рдпрд╛рдиреА 30 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рд▓реЗ рд▓реА рдЧрдИрдВ -> 10 рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд -> рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╡рд╛рдкрд╕ рд▓реЗрдирд╛ -> 10 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рд▓реА рдЧрдИ -> рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ -> 3 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ -> рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╡рд╛рдкрд╕ рд▓реЗрдирд╛ -> 3 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рд▓реЗ рд▓реА рдЧрдИ)ред

рдореИрдВрдиреЗ 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 рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧреА рдЬрд┐рд╕реЗ

https://codesandbox.io/s/vr648ywy3

рдЖрдЗрдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдПрдкреАрдЖрдИ рдЪрд░реНрдЪрд╛ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦреЗрдВ, рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдкрд░ рдирд╣реАрдВред

рдореИрдВ рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЗрд╕ 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рддрдХ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦреЛ :)

рдПрдкреАрдЖрдИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ:

  1. рдХреНрдпрд╛ рд╣рдо рдЖрдЗрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдЗрдЯрдордХреЗрдпрдмреИрдХ рдореЗрдВ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдлрд┐рдХреНрд╕реНрдбрд▓рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣реИ?

  2. рдХреНрдпрд╛ рд╣рдо рдЖрдВрддрд░рд┐рдХ рдХрдВрдЯреЗрдирд░ рдКрдВрдЪрд╛рдИ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ / рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП 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 рдореЗрд░реА рдЯреВрдбреВ рд╕реВрдЪреА рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдмрд╣реБрдд рд╕рдЯреАрдХ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рдХреНрд╖рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ!

рдореБрдЭреЗ рддреИрдирд╛рдд рд░рдЦреЗрдВ!

~ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред ~

рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЖрдЗрдЯрдо рд░реЗрдВрдбрд░ рдорд╣рдВрдЧрд╛ рд╣реЛ рдпрд╛ рджреВрд╕рд░реА рдЪреАрдЬред

https://github.com/devhubapp/devhub/pull/152

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ 100% рдХрдВрдЯреЗрдирд░ рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде AutoSizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ 100vh рдФрд░ calc () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдвреВрдВрдврдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛

рдХреБрдЫ рдЯреВрдЯ рдЧрдпрд╛ рд╣реЛрдЧрд╛

рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ?

рдореИрдВ 1.6.0-рдЕрд▓реНрдлрд╛.1 рд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХрд▓рд╛рдЗрдЬрд╝рд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдб рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж

рдирдорд╕реНрдХрд╛рд░, рдореИрдВ DynamicSizeList рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рднреА рдЖрдЗрдЯрдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╣реИрдВред рдореИрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ style рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ height рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, top рдФрд░ left рд╣рдореЗрд╢рд╛ 0 ред
рдореБрдЭреЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдпрд╛рдж рдЖрдпрд╛ :-)?

@ рдЕрдВрдЧреВрд░-рдЧреИрдмреНрд░рд┐рдПрд▓ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдЬрдирди рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рдЖрддрд╛ рд╣реИред

рдКрдБрдЪрд╛рдИ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╢реБрд░реВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рддрд╛рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ ...

рдареАрдХ рд╣реИ, рдореИрдВ рддрд░реНрдХ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдЗрдЯрдо рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореИрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдХреА рд╣реИ рдпрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХрджрдо рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдиреАрдЪреЗ рдирд╣реАрдВ рдЧреБрдЬрд░рдирд╛)ред

Screen Shot 2019-07-07 at 18 08 53

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

рдЕрдм рд╕реВрдЪреА рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрднреА рд╕рд┐рдХреБрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрд░реНрде:

  1. рдпрджрд┐ рдореИрдВ 6 рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
  2. 20 рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ, рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕рднреА рдЕрдЪреНрдЫреЗред
  3. рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд╛рдкрд╕ 6 рдЖрдЗрдЯрдо рдореЗрдВ рдмрджрд▓реЗрдВ, рдЕрдВрддрд┐рдо рдЖрдЗрдЯрдо рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рд╕рдлреЗрдж рд╕реНрдерд╛рди рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдкрд┐рдЫрд▓реА рд╕рд╛рдордЧреНрд░реА (20 рдЖрдЗрдЯрдо рдбреЗрдЯрд╛ рд╕реЗрдЯ) рд╕реЗ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдиреЗ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЙрдард╛рдпрд╛, рдореИрдВрдиреЗ рд╕реИрдВрдб рдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЖрдк @bvaughn рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ
рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://codesandbox.io/s/sweet-sea-irxl8

рдЕрдм рд╕реВрдЪреА рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрднреА рд╕рд┐рдХреБрдбрд╝рддрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрд░реНрде:

  1. рдпрджрд┐ рдореИрдВ 6 рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
  2. 20 рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рдмрджрд▓реЗрдВ, рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рд╕рднреА рдЕрдЪреНрдЫреЗред
  3. рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд╛рдкрд╕ 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;

уВ╣уВпуГкуГ╝уГ│уВ╖уГзуГГуГИ 2019-07-14 11 49 54

рдирдорд╕реНрдХрд╛рд░ @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 рд▓реЗрдХрд┐рди рдореИрдВ рднреА рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдРрдк рдмрд╛рд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдбрд╛рдЙрди рдкрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЕрдм рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
image

рдЕрдЪреНрдЫрд╛ рджрд┐рдиред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ 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


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рд╕рдВрд╕реНрдорд░рдг рддрдп рдХрд┐рдпрд╛ - рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдХреЛ рдореЗрдореЛ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ - рдирд╣реАрдВ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣рд╛рдБ рдорд╛рдорд▓рд╛ рдХрд┐рд╕реА рдореЗрдВ рдПрдХ memoized рд╕рдорд╛рдзрд╛рди рдЕрдкрдиреА рд╕реВрдЪреА рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдбреЛрдо рд╕рдВрд░рдЪрдирд╛ рд╣реИ (рдпрд╛ рд╡реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╡реАрдбрд┐рдпреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рд╣реИ): https://codesandbox.io/s/dynamic-size-of-react-window-list -рдорд┐рдЯреНрд╕-рдЗрд░реЗрдЯ 4


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}/>;
    }
}

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдлрд╛рд░реА рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдбрд╛рдпрдирд╛рдорд┐рд╕реЗрд▓рд╛рдЗрдЬреНрдб рд▓рд┐рд╕реНрдЯ рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдКрдВрдЪрд╛рдИ рдпрд╛ рдорд╛рд░реНрдЬрд┐рди-рдЯреЙрдк рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рдордЧреНрд░реА рдУрд╡рд░рд▓реИрдк рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИред

рдЬрдм рдкрдВрдХреНрддрд┐ рдХреА рд╡рд┐рдВрдбреЛ рдЪреМрдбрд╝рд╛рдИ / рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддреА рд╣реИ, рддреЛ рдирдИ рдКрдВрдЪрд╛рдИ рд╕рд╛рдордЧреНрд░реА рдХреА рдирдИ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдЧрдгрдирд╛ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ рдЕрдЧрд░ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЬрд╣рд╛рдВ рдкрдВрдХреНрддрд┐ рдЕрдм рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ, рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рдкрд╣рд▓реЗ рдкреГрд╖реНрда рд▓реЛрдб рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ: /

рдпрд╣ рд╕рдм рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕рд╣рд┐рдд рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдлрд╛рд░реА рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдРрдк рдХреЛ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Screenshot 2020-02-15 at 14 27 19

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдорджрдж рдХрд╛ рд╡рд╛рдХрдИ рдХреБрдЫ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛!

@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 () рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдВрдХреНрддрд┐ рдКрдВрдЪрд╛рдИ рдХреА рдЧрдгрдирд╛ рдкреВрд░реЗ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

CodeSandbox

@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 рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реИрдВ (рдмрд┐рдирд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ):

  1. рд╕рднреА рдЖрдЗрдЯрдо рдореЗрдВ style={position: absolute, left: 0, top: 0} рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдКрдкрд░ рдмреИрдарддреЗ рд╣реИрдВред
  2. рдпрджрд┐ рдореИрдВ рд╢реИрд▓реА рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕реВрдЪреА рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдереЛрдбрд╝рд╛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рд┐рдХреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХреБрд▓ рдКрдВрдЪрд╛рдИ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдореИрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ x рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рд▓рдВрдмрд╛рдИ-рдПрдХреНрд╕ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдлреЗрдж рд╕реНрдерд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВред

рджреЛрдиреЛрдВ рдХрд╛ рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред
рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХреНрд░реЛрдо рдкрд░ 1.9.0 рдХрд╛рдВрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдЫрд┐рдкреЗ рд╣реБрдП рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдКрдкрд░ рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ред https://github.com/bvaughn/react-window/issues/6#issuecomment -50901642222

рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХрд░рдг рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдЗрдЯрдо рдХреА рд╕реВрдЪреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╕реНрдХреНрд░реЙрд▓ рд▓рдЧрднрдЧ рдПрдХ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдКрдВрдЪрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдПрдХреНрд╕ рдкрд┐рдХреНрд╕рд▓ рдХреЛ "рд╕реНрдХреНрд░реЙрд▓ рдбрд╛рдЙрди" рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрдЬрд╛рдп, рдШрдЯрдХ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ N / 2 рдкрд░ рдЖрдзрд╛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЖрдЗрдЯрдо, рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ N-1 рдореЗрдВ рдирд┐рдЪрд▓реЗ рд░реЗрдВрдбрд░рд░ рдЖрдЗрдЯрдо рдкрд░ред

рдпрд╣ рд╕реВрдЪреА рдХреЗ рдордзреНрдп рдпрд╛ рдЕрдВрдд рддрдХ рд╕реАрдзреЗ рдЕрдВрдЧреВрдареЗ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рд╕реНрдХреНрд░реЙрд▓ рдЕрдВрдЧреВрдареЗ рдХреА рд╢рд┐рдерд┐рд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЬрдм рдШрдЯрдХ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЕрднреА, рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ VariableSizeList рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд░реНрд╕рд░ рд╕реНрдХреНрд░реЙрд▓ рдердВрдм рдЪрд╛рд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vinnymac picture vinnymac  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bnikom picture bnikom  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jsu93 picture jsu93  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marian-c picture marian-c  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ajayns picture ajayns  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ