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

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рд╣рдо рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирдВрдд рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдФрд░ рдкрдВрдХреНрддрд┐ рдХреА рдКрдВрдЪрд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реНрдХ рднреА рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд╣реБрдд рдмрд╛рд░ рд░рд┐рдбреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдмреИрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЙрд▓ setState
рдХрд░реЗрдВред
рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
componentDidMount() { window.addEventListener('scroll', this.handleScroll) } handleScroll(e) {
рд▓реЗрдХрд┐рди рдПрдХ рдЯреЗрдмрд▓ рдХреЗ рдЕрдирдВрдд рд╕реНрдХреНрд░реЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдмрд┐рдирд╛ рдЦрд┐рдбрд╝рдХреА рдпрд╛ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ред
рдпрд╣ рдПрдХ IntersectionObserver рд╣реИ ред W3c рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд╛:
рдпрд╣ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЛрдо рддрддреНрд╡ ("рд▓рдХреНрд╖реНрдп") рдХреА рджреГрд╢реНрдпрддрд╛ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЧрдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдХреА рдКрдВрдЪрд╛рдИ, рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореВрд▓реНрдп рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБ рдкрд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдВрдХрд░реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдПрдВрдХрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХреЛ рдбреЛрдо рдКрдВрдЪрд╛рдИ рдФрд░ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЧрдгрд┐рддреАрдп рдЬрд╛рджреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕реВрдЪрдХрд╛рдВрдХ 1 рдХреЗ рд▓рд┐рдП рдПрдВрдХрд░ рдЯреНрд░рд┐рдЧрд░
рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд░реЗрдВрдбрд░ рдХрд░реЗрдВ
IntersectionObserver
рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ред
handleSentinel = (c) => { if(!this.observer) {