рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдмрдЧ-ish
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдЬрдм рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ react-dom
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП transitively ReactDOMFrameScheduling.js
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) рдХреНрдпреЛрдВрдХрд┐ rAF рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИред
Invariant Violation: React depends on requestAnimationFrame. Make sure that you load a polyfill in older browsers.
at invariant (app/node_modules/fbjs/lib/invariant.js:44:15)
at Object.<anonymous> (app/node_modules/react-dom/lib/ReactDOMFrameScheduling.js:30:3)
рдпрджрд┐ рдЖрдк рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдШрдЯрдХ рдХреА рддрд░рд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдЖрдпрд╛рдд, рд╣реИ рд╣реИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ react-router-scroll
рдХрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, react-dom
рдХреЗ рдмрдЬрд╛рдп react-dom/server
ред
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИ?
рдЬрдм рддрдХ requestAnimationFrame рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛, рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ред Ex: raz рдХреЗ рд▓рд┐рдП lazily рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ rIC рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
рд░рд┐рдПрдХреНрдЯ рдХреЗ рдХреМрди рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдХреМрди рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ / OS рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИрдВ?
рдиреЛрдб 16.1.1 рдкрд░ 16.0.0-рдЕрд▓реНрдлрд╛.3 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдЕрд▓реНрдлрд╛ 3 рдореЗрдВ рд╣реЛрдиреЗ рд▓рдЧрд╛, рдЬрд┐рд╕рдиреЗ рдлрд╛рдЗрдмрд░ рднреЗрдЬ рджрд┐рдпрд╛ рдФрд░ рд╕рдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ред
рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЬреЛ рдореЗрд░реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд░рд┐рдПрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рджреВрд╕рд░реЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗред рдпрд╣ рд╣реИ рдЬреЛ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:
global.window = global;
window.addEventListener = () => {};
window.requestAnimationFrame = () => {
throw new Error('requestAnimationFrame is not supported in Node');
};
рд╣рдо рдЗрд╕реЗ rAF
рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдХреЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рдЬрдм рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ findDOMNode
(рдЬреЛ рд╕рдВрднрд╡рдд: рдХреНрдпрд╛ рдШрдЯрдХ рдХрд░рддреЗ рд╣реИрдВ) рдкреВрд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХреНрд╕реАрд▓рд░ рдЗрдирд┐рдЯ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред ред
@gaearon рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, react-dom
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ findDOMNode
рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рдЙрди рд╣реБрдХ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рдкрд░ рд░рд┐рдПрдХреНрдЯ-рдбреЛрдо рдФрд░ рд░рдирд┐рдВрдЧ рдлрд╛рдЗрдВрдбрдбреЛрдордиреЙрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╣реБрдХ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдареАрдХ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдк рдПрдХ рдШрдЯрдХ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ findDOMNode
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЗрд╕реЗ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛
рдирд╣реАрдВ, рдкрд░реАрдХреНрд╖рдг рдЗрд╕реЗ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрд░рдПрдПрдл рдкреЙрд▓реАрдлрд┐рд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдкреАрдЖрд░ рд╕рд┐рд░реНрдл рдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╣реИред рдмрд╕ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ред рдХреЛрдИ рднреА рд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рдкреНрд░реАрдЯрд┐рдпрд░ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЪрд▓рд╛ред
рдХреЛрдб рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛ред
рдореИрдВрдиреЗ ReactFiberScheduler рдХреЗ рдЕрдВрджрд░ rAF
рд▓рд┐рдП рдЪреЗрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛
рд▓реЗрдХрд┐рди рдЕрдм, рдЕрдЧрд░ rAF
рдкреЙрд▓рд┐рдлрд┐рд▓реНрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдлреЗрдВрдХрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЖрд▓рд╕реА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЬреЛ рдореЗрд░реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд░рд┐рдПрдХреНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╛рдЗрд▓ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рджреВрд╕рд░реЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗред рдпрд╣ рд╣реИ рдЬреЛ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ: