Angulareact

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЖрд╡реЗрджрди рдПрдВрдЧреБрд▓рд░, рдФрд░ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рддреЛ, рдЖрдкрдХреЛ рдХрдо рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред


рддреНрдпрд╛рдЧ


рдореИрдВ рдХреЛрдгреАрдп рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВрдиреЗ 2017 рдореЗрдВ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдлрд┐рд░ рдПрдВрдЧреБрд▓рд░рдбрд╛рд░реНрдЯ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рджреЗрдЦрд╛, рдФрд░ рдЕрдм рдореБрдЭреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдорд░реНрдерди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рдЕрдЬреАрдм рд╣реИрдВ рдпрд╛ "рджреВрд╕рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ" рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред


рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЕрднреА рддрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рд╕рдорд╕реНрдпрд╛


рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Angular 8. Plus рдкрд░ рдХрд╛рдлреА рдмрдбрд╝реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ (React рдкрд░ рднреА) рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдкрд░ рдХреБрдЫ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВред рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдВрдкрдиреА рдХреА рдЖрдВрддрд░рд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╢реИрд▓реА рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХрдорд╛рддреНрд░ рддрд╛рд░реНрдХрд┐рдХ рддрд░реАрдХрд╛ рдПрдХ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдЬрд▓реНрджреА рд╕реЗ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдпрд╣ рдХреЛрдгреАрдп рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реВрдВред Google рдкрд░ "рдХреЛрдгреАрдп рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдХреЗ рд▓рд┐рдП рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдХреЛрдИ рдкреНрд░рд▓реЗрдЦрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд░реАрдбрдореА рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ Microsoft рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЗ рдЬреЛрдЦрд┐рдо рдкрд░ рд╣реА рд╣реИред рдореИрдВ рдРрд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдкреИрдХреЗрдЬ рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред


рдЫрд╡рд┐


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ @ рдХреЛрдгреАрдп-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ / рдХреЛрд░


рдирд┐рд░реНрдгрдп


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ DOM рдкреЗрдбрд╝ рдХрд╛ рдкреНрд░рдмрдВрдзрдиред рд╣рдо рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рддрддреНрд╡ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ DOM рдиреЛрдб рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред


const Hello = () => <p>Hello, React!</p>; render(<Hello />, document.getElementById('#hello')); 

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


рдЯреНрд░реЗрдирд┐рдВрдЧ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк createElement рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди createElement рдХреЛ рдХреЙрд▓рд┐рдВрдЧ createElement рд▓рд┐рдП рд╕реАрдорд┐рдд createElement , рддреЛ рдЖрдкрдХреЛ рдХреЛрдИ рднреА рдХрджрдо рдирд╣реАрдВ рдЙрдард╛рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рд╕рдм рдХреБрдЫ рдмрд╕ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдгреАрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рд╕рдВрдХрд▓рдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ --jsx=react рдпрд╛ tsconfig.json рдореЗрдВ compilerOptions рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрдВрдХреНрддрд┐ "jsx": "react" рдЬреЛрдбрд╝реЗрдВ "jsx": "react" ред


рдПрдХрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ


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


рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ render рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрддрд░ рдФрд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдХреЛрдгреАрдп рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬреЛ рд░рд┐рдПрдХреНрдЯ рддрддреНрд╡ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреВрд░реЗ рддрд░реНрдХ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧрд╛ред


 // Hello.tsx export const Hello = () => <p>Hello, React!</p>; // hello.component.ts import { createElement } from 'react'; import { render } from 'react-dom'; import { Hello } from './Hello'; @Component({ selector: 'app-hello', template: `<div #react></div>`, }) export class HelloComponent implements OnInit { @ViewChild('react', { read: ElementRef, static: true }) ref: ElementRef; ngOnInit() { this.renderReactElement(); } private renderReactElement() { const props = {}; const reactElement = createElement(Hello, props); render(reactElement, this.ref.nativeElement); } } 

рдХреЛрдгреАрдп рдШрдЯрдХ рдХрд╛ рдХреЛрдб рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдпрд╣ рдЦреБрдж рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рд▓реА рдХрдВрдЯреЗрдирд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рдордп, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрддреНрд╡ рдХрд╛ рд░реЗрдВрдбрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ createElement рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ render рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ Angular рд╕реЗ рдмрдирд╛рдП рдЧрдП DOM рдиреЛрдб рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХреЛрдИ рдЕрдиреНрдп рдЕрдВрдЧреБрд▓ рдШрдЯрдХ, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВред


рдЗрдирдкреБрдЯ рдПрдХреАрдХрд░рдг


рдЖрдорддреМрд░ рдкрд░, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рднреА рдХрд╛рдлреА createElement - рдЬрдм createElement рдХреЙрд▓ рдХрд┐рдпрд╛ createElement рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ createElement рд╕реЗ рдШрдЯрдХ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 // Hello.tsx export const Hello = ({ name }) => <p>Hello, {name}!</p>; // hello.component.ts import { createElement } from 'react'; import { render } from 'react-dom'; import { Hello } from './Hello'; @Component({ selector: 'app-hello', template: `<div #react></div>`, }) export class HelloComponent implements OnInit { @ViewChild('react', { read: ElementRef, static: true }) ref: ElementRef; @Input() name: string; ngOnInit() { this.renderReactElement(); } private renderReactElement() { const props = { name: this.name, }; const reactElement = createElement(Hello, props); render(reactElement, this.ref.nativeElement); } } 

рдЕрдм рдЖрдк name рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХреЛрдгреАрдп рдШрдЯрдХ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреБрдЫ рдмрд╛рд╣рд░реА рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд▓рд╛рдЗрди рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдПрдХ рдкреБрд░рд╛рдирд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдорд┐рд▓реЗрдЧрд╛ред рдХреЛрдгреАрдп рдореЗрдВ рдПрдХ ngOnChanges рдЬреАрд╡рди рдЪрдХреНрд░ ngOnChanges рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдШрдЯрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЙрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо OnChanges рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:


 // ... ngOnChanges(_: SimpleChanges) { this.renderReactElement(); } // ... 

рдпрд╣ рдирдП рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рдмрдирд╛рдП рдЧрдП рддрддреНрд╡ рдХреЗ рд╕рд╛рде render рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЦреБрдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдкреЗрдбрд╝ рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдХреЛрдгреАрдп-рдШрдЯрдХ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 <app-hello name="Angular"></app-hello> <app-hello [name]="name"></app-hello> 

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


рдЖрдЙрдЯрдкреБрдЯ рдПрдХреАрдХрд░рдг


рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рдЪрд▓реЛ @Output рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ @Output рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЛ @Output рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред


 // Hello.tsx export const Hello = ({ name, onClick }) => ( <div> <p>Hello, {name}!</p> <button onClick={onClick}>Say "hello"</button> </div> ); // hello.component.ts import { createElement } from 'react'; import { render } from 'react-dom'; import { Hello } from './Hello'; @Component({ selector: 'app-hello', template: `<div #react></div>`, }) export class HelloComponent implements OnInit { @ViewChild('react', { read: ElementRef, static: true }) ref: ElementRef; @Input() name: string; @Output() click = new EventEmitter<string>(); ngOnInit() { this.renderReactElement(); } private renderReactElement() { const props = { name: this.name, onClick: () => this.lick.emit(`Hello, ${this.name}!`), }; const reactElement = createElement(Hello, props); render(reactElement, this.ref.nativeElement); } } 

рд╣реЛ рдЧрдпрд╛ред рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВред


  <app-hello [name]="name" (click)="sayHello($event)"></app-hello> 

рдкрд░рд┐рдгрд╛рдо рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЖрд╡рд░рдг рд╣реИред рдпрд╣ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рднреАрддрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рдмрд╛рдд рдФрд░ ...


рдореЗрд░реЗ рд▓рд┐рдП, рдХреЛрдгреАрдп рдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рдЯреВ-рд╡реЗ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ, ngModel ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд╕рд░рд▓ рд╣реИ, рдмрд╣реБрдд рдХрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдПрдХреАрдХрд░рдг рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдВрддреНрд░ рдЖрдВрддрд░рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╕реБрдкрд░-рд╕рдмреЛрдкреНрдЯреАрдорд▓ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ ngModel рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ ngModel ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ ControlValueAccessor рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ( @angular/forms рдкреИрдХреЗрдЬ рд╕реЗ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рджрд╛рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; const REACT_VALUE_ACCESSOR: any = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => HelloComponent), multi: true }; @Component({ selector: 'app-hello', template: `<div #react></div>`, providers: [PREACT_VALUE_ACCESSOR], }) export class PreactComponent implements OnInit, OnChanges, ControlValueAccessor { // ... } 

рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП writeValue , writeValue , registerOnChange , registerOnTouched рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд╣рдореЗрдВ рдЙрдирдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИред


 //    const noop = () => {}; @Component({ selector: 'app-hello', template: `<div #react></div>`, providers: [PREACT_VALUE_ACCESSOR], }) export class PreactComponent implements OnInit, OnChanges, ControlValueAccessor { // ... private innerValue: string; //      ngModel private onTouchedCallback: Callback = noop; private onChangeCallback: Callback = noop; //       //       get value(): string { return this.innerValue; } set value(v: string) { if (v !== this.innerValue) { this.innerValue = v; //    ,   this.onChangeCallback(v); } } writeValue(value: string) { if (value !== this.innerValue) { this.innerValue = value; //        this.renderReactElement(); } } //   registerOnChange(fn: Callback) { this.onChangeCallback = fn; } registerOnTouched(fn: Callback) { this.onTouchedCallback = fn; } //    onBlur() { this.onTouchedCallback(); } } 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд░рд┐рдПрдХреНрдЯ рдЯреВ-рд╡реЗ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдФрд░ рдХреЙрд▓рдмреИрдХ рджреЗрдВрдЧреЗред renderReactElement рдореЗрдердб рдХреЛ renderReactElement ред


 // ... private renderReactElement() { const props = { name: this.name, onClick: () => this.lick.emit(`Hello, ${this.name}!`), model: { value: this.value, onChange: v => { this.value = v; } }, }; const reactElement = createElement(Hello, props); render(reactElement, this.ref.nativeElement); } // ... 

рдФрд░ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдореЗрдВ, рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдФрд░ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


 export const Hello = ({ name, onClick, model }) => ( <div> <p>Hello, {name}!</p> <button onClick={onClick}>Say "hello"</button> <input value={model.value} onChange={e => model.onChange(e.target.value)} /> </div> ); 

рдЕрдм, рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдВрдЧреБрд▓рд░ рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред рдЖрдк рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред


 <app-hello [name]="name" (click)="sayHello($event)" [(ngModel)]="name" ></app-hello> 

рдкрд░рд┐рдгрд╛рдо


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рджрд┐рдЦрд╛рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рди рдХреЗрд╡рд▓ рдирд┐рд░рдВрддрд░ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдгреАрдп-рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд┐рд╕реА рднреА рд░рд┐рдПрдХреНрдЯ-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдзреАрд░реЗ-рдзреАрд░реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЛ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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


рдПрдВрдЧреБрд▓рд░ рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрднреА рднреА рд░рд┐рдПрдХреНрдЯ-рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд░реИрдкрд░ рдШрдЯрдХ рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЙрдкрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред рдореБрд╢реНрдХрд┐рд▓ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдкрд░рдд рд▓рд┐рдЦреА рдЬрд╛рдП рдЬреЛ рдЗрдВрдЬреЗрдХреНрдЯрд░ рд╕реЗ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреАред рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ред


рдмреЛрдирд╕


рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдПрдВрдЧреБрд▓рд░ рдХреЗ 85KB рдХреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд▓рдЧрднрдЧ 40KB react рдФрд░ react-dom рдХреЛрдб react рдЬрд╛рддрд╛ react ред рдЗрд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЧрддрд┐ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд▓рдШреБ рдкреНрд░реАрд░реЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рдЬрди рдХреЗрд╡рд▓ 3KB рд╣реИред рдЗрд╕рдХрд╛ рдПрдХреАрдХрд░рдг рд▓рдЧрднрдЧ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред


  1. tsconfig.json рдПрдХ рдирдпрд╛ рд╕рдВрдХрд▓рди рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - "jsxFactory": "h" , рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ "jsxFactory": "h" рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП h рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм, import { h } from 'preact' рдХреЛрдб рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ - import { h } from 'preact' ред
  2. рд╕рднреА рдХреЙрд▓ React.createElement рдХреЛ React.createElement рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ Preact.h ред
  3. рд╕рднреА рдХреЙрд▓ ReactDOM.render рдХреЛ ReactDOM.render рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ Preact.render ред

рд╣реЛ рдЧрдпрд╛! рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдкреНрд░реИрдХреНрдЯрд┐рд╕ рдХреА рдУрд░ рдкрд▓рд╛рдпрди рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝реЗрдВред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рдорддрднреЗрдж рдирд╣реАрдВ рд╣реИрдВред


рдпреВрдкреАрдбреА 19.9.19 16.49


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╡рд┐рд╖рдпрдЧрдд рд▓рд┐рдВрдХ - рдорд╛рдЗрдХреНрд░реЛ рдлреНрд░рдВрдЯреЗрдВрдб


UPD 20.9.19 14.30


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдПрдХ рдФрд░ рд╡рд┐рд╖рдпрдЧрдд рд▓рд┐рдВрдХ - рдорд╛рдЗрдХреНрд░реЛ рдлреНрд░рдВрдЯреЗрдВрдбреНрд╕

Source: https://habr.com/ru/post/hi468063/


All Articles