рд╣рд╛рд▓ рд╣реА рдореЗрдВ,
"рдЧрд╛рдпрдм рдврд╛рдВрдЪреЗ" рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд▓реЛрдХреЛрдореЛрдЯрд┐рд╡ рдХреЛ рд╕рдВрджреЗрд╣ рдХреЗ рдмрд┐рдирд╛
SvelteJS рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдмрд┐рд▓реНрдбрдЯрд╛рдЗрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдПрдХ рд╡реЗрдирд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдореНрдкрд╛рдЗрд▓рд░ред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡реЗрд▓реНрдЯ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреА рд╣рддреНрдпрд╛рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг? рдпрд╣ "рдЕрднреА рддрдХ рдПрдХ рдЕрдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реВрдкрд░реЗрдЦрд╛" рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХрдИ Svelte рдорд╣рд╛рд╢рдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдХрд┐рдВрд╡рджрдВрддреА рдмрддрд╛рдКрдВрдЧрд╛ ...
рдкрд╛рд╡рд░ рдСрдлрд╝ рдж рд▓реАрдЬреЗрдВрдб рдСрдлрд╝ рдж рдкрд╛рд╡рд░
рдХреБрдЫ рд░реВрдкрд░реЗрдЦрд╛рдПрдВ Google рдФрд░ рдлреЗрд╕рдмреБрдХ рдХреЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдереАрдВ, рдЕрдиреНрдп - рд╢рд╛рдВрдд рджреЛрд╕реНрддреЛрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рд░рд┐рдЪ рд╣реИрд░рд┐рд╕ рдХреЗ рдХрд░реАрдм "рдзреНрдпрд╛рди" рдХреЗ рддрд╣рдд ред
рдордиреБрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдиреМ рдЪреМрдЦрдЯреЗ рдмрдирд╛рдП рдЧрдП, рд╕рд╛рдд рдмреМрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред рддреАрди рдЕрдиреНрдп рдЪреМрдЦрдЯреЗ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рд╡реНрд░рдд, рдХреЛрдгреАрдп) рдХрд▓реНрдкрд┐рдд рдмреМрдиреЗ рдХреЗ рд▓рд┐рдП рдереЗред
рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЬрд╛рд░реЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд░рд┐рдЪ рд╣реИрд░рд┐рд╕ рдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдФрд░ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рдИ ...
рдЙрди рд╕рднреА рдкрд░ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛,
рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛,
рдЙрди рд╕рднреА рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛
рдФрд░ рд╕рд╛рде рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдВрдзрддреЗ рд╣реИрдВред
- рдЪреМрдЦрдЯреЗ рдХреЗ рднрдЧрд╡рд╛рди
рд╕рдорд╕реНрдпрд╛
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧ рдЬреЛ рдЧрдВрднреАрд░ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЗрдВ рд▓рдЧреЗ рд╣реБрдП рд╣реИрдВ, рдиреЗ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рдФрд░ / рдпрд╛ рдЕрдЧрд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдЪреБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред
рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрдХреЗрдЬреЛрдВ, рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ, рд╡реНрд╣реЗрд▓, рдЪреМрдЦрдЯреЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдмрдВрдж рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реИ рдЬреИрд╕рд╛ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рдерд╛ред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рднреА рдЖрдВрджреЛрд▓рди рдореЗрдВ рддреЗрдЬреА рдЬрд╛рд░реА рд╣реИред
рдпрд╣ рд╕рдм, рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдкрд╕рдВрдж рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдЖрдзреБрдирд┐рдХ рдЯреАрдо рдФрд░ рдХрдВрдкрдирд┐рдпрд╛рдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬреЗрдПрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╢реБрд░реВ рдХрд░рддреА рд╣реИрдВред рдмреЗрд╢рдХ, рдЬрдм рдпрд╣ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рди рдХреЗрд╡рд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреАред рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрддрдирд╛ рдХреБрдЫ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рди рд╣реЛред

рдЕрдкрдиреЗ рдЖрдк рдХреЗ рд▓рд┐рдП рдиреНрдпрд╛рдпрд╛рдзреАрд╢, рдЯреАрдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд╛рдлреА рд╣рдж рддрдХ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдврд╛рдВрдЪреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╢рд┐рдХрд╛рд░ рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдХрднреА-рдХрднреА рдмрдЬрдЯ рдФрд░ рд╕рдордпрд╕реАрдорд╛ рднреА рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВред
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ, рдЕрдЧрд░ рдХрд╣реАрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмреАрдЪ рдореЗрдВ, рдЖрдкрдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЧрд▓рдд рд╡рд┐рдХрд▓реНрдк рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИред рдХреБрдЫ рдПрдХ рд╕рд╛рде рдФрд░ рд╕реНрдкрд┐рди рдирд╣реАрдВ рд╣реБрдЖред рдорд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рд╕рдордп рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдмрдбрд╝реА рдЯреАрдо, рдереЛрдбрд╝рд╛ рдХрдо рддреЗрдЬ, рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдпрд╛ рд╡рд┐рдХрд╛рд╕ рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐ред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЗрд╕ рдврд╛рдБрдЪреЗ рд╕реЗ 100% рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдкрд░ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЖрдХреНрд░рд╛рдордХ, рдЬрдм рдлрд┐рд░ рднреА рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрд░реА рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рд╢рд╛рдпрдж, рд╣рдо рдЕрдЧрд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЙрд╕реА рдврд╛рдВрдЪреЗ рдкрд░ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЙрди рд╕рднреА "рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП" рд╕рдорд╛рдзрд╛рди, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрд╛рдЗрдк рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓, рдЗрд╕рдХреЗ рд╕рд╛рде рдирд░рдХ, рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛рд░реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдРрд╕рд╛ рд╢рд╛рдВрдд рд▓рд┐рдЦрд╛ "%% рд▓рд╛рдареА рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛% рдбрд╛рд▓реЗрдВ рдФрд░ рдХрдо рд╕рд╛рдорд╛рдЬрд┐рдХ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рд╡рд╛рд▓реА рд▓рдбрд╝рдХрд┐рдпреЛрдВ рдХреЛ", рдФрд░ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдЕрдЧрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХреНрд░рдордг рд╡рд░реНрддрдорд╛рди рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдФрд░ рд░реВрдкрд╛рдВрддрд░ - рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдПрдХ рдмрдбрд╝реА рдХрдВрдкрдиреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпреИрдВрдбреЗрдХреНрд╕ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдПрдХ huilion рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗрд╡рд▓ рдХреБрдЫ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпреЗ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЙрди рд╡рд┐рднрд┐рдиреНрди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рдмреИрдарддреА рд╣реИрдВ рдФрд░ рдЙрдирд╕реЗ рдирдлрд░рдд рдХрд░рддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢реБрд░реВ рдореЗрдВ рдЪреБрдирд╛ рдерд╛ред
рдФрд░ рдпрд╣рд╛рдВ рдЖрдкрдХрд╛ рдЕрджреНрднреБрдд рдиреЗрддреГрддреНрд╡ рд╣реИ, Google рд╕рд╛рдордЧреНрд░реА рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдиреЗ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╣рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдПрдХ рдзрд░реНрдордпреБрджреНрдз рдореЗрдВ рднреЗрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЪрд╛рд▓рд╛рдХ рдбрд┐рдЬрд╛рдЗрдирд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП рдмрдЯрди рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдирдП рдПрдХрд▓ рдпреВрдЖрдИ рдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╣рдЬрд╛рд░реЛрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕реНрдХреНрд░реВрдЯрдиреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣реБрд░реНрд░реЗ рд╕рд╛рдерд┐рдпреЛрдВ!
рдЬреАрд╡рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкрд░реА рдХрдерд╛ рд╣реИ, рд╣реИ рдирд╛? рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЗрди рд╕рднреА рдирдП рдШрдЯрдХреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдкрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдФрд░ рдкреИрд╕рд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реМрдВрджрд░реНрдп рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ "рд╕рдм рдХреБрдЫ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ," рддреЛ рдЖрдк рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд░реНрдЬрди рдЯреАрдореЛрдВ рдХреЛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдПрдХреНрдЯ рдкрд░ред рдпрд╣ рд╕рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реБрд╕реНрдд рдЧрдВрджрдЧреА рдЬрд┐рд╕ рдкрд░ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реЗ 2-3 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреИрддрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧреАред рдЦреИрд░, рдЕрдЪреНрдЫрд╛)
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред рдЖрдк рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдкрд░ рдПрдХ рдЕрджреНрднреБрдд рдирдИ рдпреВрдЖрдИ-рдХрд┐рдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдФрд░ рдлрд┐рд░ рдмрд╕ рдЕрдкрдиреА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕ рдпреВрдЖрдИ-рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИ - рд░рдирдЯрд╛рдЗрдоред
рдЕрдЧрд░ рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Angular (~ 500Kb) рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдиреЗ React (~ 98Kb) рдореЗрдВ UI-рдХрд┐рдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ, рджреВрд╕рд░реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЗ рдЭреБрдВрдб рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪреЗрдВ, UI-рдХрд┐рдЯ рд╣реА рдкреНрд░рддреНрдпрдХреНрд╖ рд╣реИ рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред
рдирд┐рд░реНрдгрдп
рдмрд┐рдирд╛ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╣рдореЗрдВ рдмрд╣реБрдд "рдЧрд╛рдпрдм" рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдВ рдореБрдЦреНрдп рд╢рд░реНрдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдкреГрдердХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рд╣рд░реА рдПрдХреАрдХрд░рдг рддрдВрддреНрд░ рдФрд░ рд╕рдВрдЧрдд рдПрдкреАрдЖрдИ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг SvelteJS рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА
рдХреБрдЫ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╣реА рд╣реИрдмреЗ
рдкрд░ рд▓рд┐рдЦреЗ рдЬрд╛ рдЪреБрдХреЗ рд╣реИрдВред
рддреЛ, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рд╣реИред рд╢рд╛рдпрдж рд╣рдо рдЗрд╕рд╕реЗ рдердХ рдЧрдП рд╣реИрдВ, рдФрд░ рд╣рдо рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдПрдХ рджреБрд░реНрдЧрдо рд╡рд┐рд▓рд╛рд╕рд┐рддрд╛ рд╣реИред рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдпрд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдареАрдХ рд╣реИ, рдпрд╛ рд╣рдордиреЗ рдПрдХ рдПрдХрд▓ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдо Svelte рдореЗрдВ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдкреНрд░рд╕реНрддреБрдд? рд╣рд╛рдВ, рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ, рдХрд┐рд╕реА рдиреЗ рднреА рдРрд╕реА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХреА рд╣реИред рдЖрдЗрдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рддреНрдпрд╛рдЧрддреБрд░рдВрдд рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рд░рд┐рдПрдХреНрдЯрд░ рдбреЗрд╡рд▓рдкрд░ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдореИрдВрдиреЗ 2015 рдореЗрдВ "рд░рд┐рдПрдХреНрдЯ рдмреИрдХ" рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рд░рд┐рдПрдХреНрдЯ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рд╡рд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╡рд╛рджрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдиреЗ рдХреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЦреЗрдж рд╣реИ рдХрд┐ рдореИрдВ рдХрдбрд╝рд╛рдИ рд╕реЗ рдиреНрдпрд╛рдп рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рд▓реЗрдЦ рдХрд╛ рдЕрд░реНрде рдЗрд╕рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕реНрд╡реЗрд▓реНрдЯ-рдШрдЯрдХ рдХреЛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдШрдЯрдХ рдХреЛ рдмрд┐рдирд╛ рдмрджрд▓реЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдирдЯрд╛рдЗрдо рд▓рдкреЗрдЯреЗ рдмрд┐рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ GitHub рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЛ рд▓реЗ рд▓реВрдВрдЧрд╛, рдЬреЛ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ
"рд░рд┐рдПрдХреНрдЯ + RxJS 6 + рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ GitHub рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреИрд╕реЗ рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ред
рдЗрд╕ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдб
REPL рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рдХреЛрдбред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрдк рдмрдирд╛рдПрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, de facto standard tool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдмрдирд╛рдПрдВ -
create-react-app :
npx create-react-app my-app cd my-app npm start
рдареАрдХ рд╣реИ, рдпрджрд┐ рдЖрдк 3000 рд╡реЗрдВ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред
Svelte рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк рд╕реНрд╡реЗрд▓реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕реНрд╡реЗрд▓реНрдЯ рдЯрд╛рд╕реНрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рдХрд▓реЗрдХреНрдЯрд░ (рд╡реЗрдмрдкреИрдХ / рд░реЛрд▓рдЕрдк / рдЧреБрдкреНрд▓ / рдЧреНрд░рдиреНрдЯ / рдЖрджрд┐) рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдЪрд░рдг рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрд╕рдПрдлрд╕реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реЗрдирд┐рд▓рд╛ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред
рд╕реНрд╡реЗрд▓реНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ, рд░реЛрд▓рдЕрдк рдХреЛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд▓реЗрдЦрдХ рд╣реИ - рд░рд┐рдЪ рд╣реИрд░рд┐рд╕ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ CRA рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Svelte рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрднрд┐рдХреНрд░рд┐рдпрд╛-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рд╕рдХреЗрдВред рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
npm run eject
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рдХреЛрд╖реЗрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдЕрдм рдЬрдм рд╡реЗрдмрдкреИрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╣реИ, рддреЛ рдЖрдк Svelte рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
npm i --save-dev svelte svelte-loader
-рд╕реЗрд╡реЗ-рджреЗрд╡ рдзреНрд╡рдЬ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рд╣рд╛рдБ рдпрд╛рдж рд░рдЦреЗрдВ, рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рдирд╣реАрдВ рд╣реИред))))
рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд▓реЛрдбрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
{ test: /\.svelte$/, use: { loader: 'svelte-loader', } },
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
.html рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП Svelte рд╕рдореБрджрд╛рдп рдореЗрдВ рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Svelte рдШрдЯрдХ рдПрдХ рдорд╛рдиреНрдп HTML рдлрд╝рд╛рдЗрд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдВрднрд╛рд╡рд┐рдд рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХрд╕реНрдЯрдо
.svelte рдлрд╝рд╛рдЗрд▓
рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред
рддреЛ рд╣рдордиреЗ рдХрд┐рдпрд╛, рдЕрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ
рд╢рд╛рдорд┐рд▓ рд╕рднреА
.svelte рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрд╕ рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ Svelte рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ Svelte рдШрдЯрдХ рд▓рд┐рдЦрдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ рдЧрдпрд╛ HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рд▓рд╛рдЧреВ рд╣реЛред рд╡реАрдПрд╕ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
"files.associations": { "*.svelte": "html" }
рдЕрдм рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ ред/src/svelte_compenders/ рдФрд░ рд╕реНрд╡рдпрдВ рдШрдЯрдХ рдХрд╛ рдлрд╝реЛрд▓реНрдбрд░ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╕
REPL рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджреЗ рд░рд╣реЗ рд╣реИрдВред
Svelte , рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ App.html Widget.svelteред
рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рд╣рдо index.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Svelte рдФрд░ React рдПрдХреАрдХрд░рдг рдХреЛрдб рд╣реЛрдЧрд╛ред
рдПрдХреАрдХреГрдд
рд╢рд╛рдпрдж рдЕрдм рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рджреВ рдХреНрдпрд╛ рд╣реИ? рдЬрд╛рджреВ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЬрд╛рджреВ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдЬрд╛рджреБрдИ, рд╣реИ рдирд╛?
рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Svelte рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдзрд╛рд░рдг JS рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ Svelte рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЛрдб рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдПрдХ рдЦрдВрдб рднреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ:
рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг ред
рдПрдХреАрдХрд░рдг рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
import React, { PureComponent } from 'react'; import Widget from './Widget.svelte'; export default class extends PureComponent { componentDidMount() { const { username } = this.props; this.widget = new Widget({ target: this.el, data: { username } }); } componentWillUnmount() { this.widget.destroy(); } render() { return ( <div ref={el => this.el = el}></div> ); } }
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдо рдмрд╕ рдЕрдкрдиреЗ рдЬрдЯрд┐рд▓ рд╕реНрд╡реЗрд▓реНрдЯ рдШрдЯрдХ рдХреЗ рдХреЛрдб рдХреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╕ рд╕реНрд╡реЗрд▓ рдШрдЯрдХ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп рдкреНрд░реЙрдкрд░ рд╕реЗ рдорд╛рдЙрдВрдЯ рдПрд▓рд┐рдореЗрдВрдЯ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдШрдЯрдХрд╡рд┐рд▓реАрдЙрдорд╛рдЙрдВрдЯ рд╣реБрдХ рдореЗрдВ Svelte рдШрдЯрдХ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдордиреЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдШрдЯрдХ рд░рд╛рдЬреНрдп рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдореВрд▓ рдШрдЯрдХ рдиреЗ рдЕрдиреНрдп рдкреНрд░реЙрдкрд░реНрд╕ рдХреЛ рд░реИрдкрд░ рдШрдЯрдХ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ Svelte рдШрдЯрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рдбреЗрдЯрд╛ рдХреЛ Svelte рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдСрдирдХреЙрдиреНрдЪ рдХреЙрд▓рдмреИрдХ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЕрдВрджрд░ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдо
рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:
componentDidMount() { ... this.widget.on('state', ({ current: { username }, changed }) => { if (changed.username) { this.props.onChange({ username }); } }); } componentWillReceiveProps({ username }) { this.widget.set({ username }); }
рдпрд╣рд╛рдВ рд╣рдордиреЗ
рд╕реНрдЯреЗрдЯ рдмрд┐рд▓реНрдЯ-рдЗрди рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд╣рд░ рдмрд╛рд░ рд╕реНрд╡реЗрд▓ рдХреЗ рдШрдЯрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреА
рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИред рдШрдЯрдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (
рд╡рд░реНрддрдорд╛рди ), рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ (
рдкрд┐рдЫрд▓реЗ ) рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЧреБрдгреЛрдВ (
рдкрд░рд┐рд╡рд░реНрддрд┐рдд ) рдХреА рд╕реВрдЪреА рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдСрдирдХреЙрдиреНрдЧ
рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдпрджрд┐ рдРрд╕рд╛ рд╣реИред
ComponentsWillReceiveProps рд╣реБрдХ рдореЗрдВ, рд╣рдо рдмрд┐рд▓реНрдЯ-рдЗрди
рд╕реЗрдЯ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдпрд╛
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, Svelte рдШрдЯрдХ рдХрд╕реНрдЯрдо рдШрдЯрдирд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдРрд╕реА рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдШрдЯрдХ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ рдФрд░ "рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛" рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЙрдкрдпреЛрдЧ
рдЕрдм рд╣рдо рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реАрдзреЗ рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрд╛рд░реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди App.js рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
import React, { Component } from 'react'; import './App.css'; import GithubWidget from './svelte_components/GithubWidget'; class App extends Component { constructor() { super(); this.state = { username: '' }; } handleChange = (state) => { this.setState({ ...state }); } render() { return ( <div className="App"> <header className="App-header"> <h1>Github Widget for: {this.state.username}</h1> <GithubWidget onChange={this.handleChange} username={this.state.username} /> </header> </div> ); } } export default App;
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдареАрдХ рд╣реИ?) рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдлрд╛рдЗрдирд▓ рдХрд░реЗрдВрдЧреЗ
рдЪрд▓рд┐рдП рдЕрдм рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдХреЗрд╡рд▓ GitHub рдпреВрдЬрд░ рдХрд╛рд░реНрдб рд╣реА рдирд╣реАрдВ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛рд░реНрдб рднреА рдЦреЛрдЬрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдШрдЯрдХ Repo.svelte рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛рд░реНрдб рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╕ User.svelte рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдФрд░ рдЗрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдбреЗрдЯрд╛ рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдлрд╝реНрд▓рд╛рдЗрдЯ рдкрд░ рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдбреНрд╕ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Widget.svelte рдирд┐рдпрдВрддреНрд░рдг рдШрдЯрдХ рдХреЛ рд╕рд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рд╕рд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдореВрд▓реНрдп рдореЗрдВ "/" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗред рдпрд╣реА рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ, рдлрд┐рд░ "/" рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдирд╛рдоред
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдмрд▓реНрдХрд┐ рдЙрд▓рдЭрди рдореЗрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди Svelte рдкрд░ рд╕рдорд╛рдзрд╛рди рдХреЛрдб рдХреА 5-6 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдЪрдореБрдЪ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдирдП рдШрдЯрдХ рдФрд░ рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╣рд╕ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ:
... import Repo from './Repo.svelte'; ... import { getUserCard, getRepoCard } from './api.js'; ... const getRepo = debounce(getRepoCard, 1000);
рдЕрдЧрд▓рд╛, рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдПрдВ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧреА рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдб рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
computed: { ... repo: ({ username }) => username.includes('/'), ... }
рдЕрдм рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕реНрд╡рд┐рдЪ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
computed: { ... card: ({ username, repo }) => username && (repo ? getRepo : getUser)(username), ... }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдб рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛:
computed: { ... Card: ({ repo }) => repo ? Repo : User, ... }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдШрдЯрдХреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ Svelte рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рдШрдЯрдХ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп
рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<svelte:component this={Card} {...card} />
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЧреМрд░ рдХрд┐рдпрд╛ рд╣реИ? рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ Svelte рдкрд░ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ! )))
рдЕрдм рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рд╡рд┐рдЬреЗрдЯ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпреВрдЬрд╝рд░рдиреЗрдо рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХреЛ рдпрд╣ рдореВрд▓реНрдп рдХреИрд╕реЗ рдорд┐рд▓реЗрдЧрд╛ред
рд╣рдо рдПрдХ рдирдИ
рдЦреЛрдЬ рд╕рдВрдкрддреНрддрд┐ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЧрд▓рдд рд╣реИред рдЗрд╕ рдЧреБрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреА рдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рддрджрдиреБрд╕рд╛рд░, рдХреЛрдИ рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
{#if search} <input bind:value=username placeholder="username or username/repo"> {/if} ... <script> export default { ... data() { return { username: '', search: false }; }, ... }; </script>
рдЕрдм App.js рдореЗрдВ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░рд┐рдПрдХреНрдЯ рд╕рд╛рдЗрдб рдкрд░ рдПрдХ рдЗрдирдкреБрдЯ рдлреАрд▓реНрдб рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрдирдкреБрдЯ рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд▓рд┐рдЦреЗрдВрдЧреЗ:
... handleUsername = (e) => { this.setState({ username: e.target.value }); } ... <h1>Github Widget for: {this.state.username}</h1> <input value={this.state.username} onChange={this.handleUsername} className="Username" placeholder="username or username/repo" />
рдФрд░ рдЗрд╕реЗ рднреА рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ, рдпрд╣рд╛рдБ Svelte рдкрд░ рдРрд╕рд╛ svg рд╕реНрдкрд┐рдирд░ рд╣реИ:
<svg height={size} width={size} style="animation-duration:{speed}ms;" class="svelte-spinner" viewbox="0 0 32 32" > <circle role="presentation" cx="16" cy="16" r={radius} stroke={color} fill="none" stroke-width={thickness} stroke-dasharray="{dash},100" stroke-linecap="round" /> </svg> <script> export default { data() { return { size: 25, speed: 750, color: 'rgba(0,0,0,0.4)', thickness: 2, gap: 40, radius: 10 }; }, computed: { dash: ({radius, gap}) => 2 * Math.PI * radius * (100 - gap) / 100 } }; </script> <style> .svelte-spinner { transition-property: transform; animation-name: svelte-spinner_infinite-spin; animation-iteration-count: infinite; animation-timing-function: linear; } @keyframes svelte-spinner_infinite-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } </style>
рдФрд░ рд╣рдо рдЗрд╕реЗ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реЛ:
... {#await card} <Spinner size="50" speed="750" color="#38b0ee" thickness="2" gap="40" /> {:then card} ...
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛:
рдХрд╛рд▓реА рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╢реАрд░реНрд╖ рдЯреЛрдкреА рдПрдХ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдиреАрдЪреЗ рд╕рдлреЗрдж рдмреНрд▓реЙрдХ рдПрдХ рд╕реНрд╡реЗрд▓реНрдЯ рд╡рд┐рдЬреЗрдЯ рд╣реИред рдпреЗ рдкрд┐рд╕ рд░рд╣реЗ рд╣реИрдВред )))
тЖТ
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдзреБрдирд┐рдХ рдШрдЯрдХ-рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Svelte рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдФрд░ рдЙрд╕ рдкрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреАред рдпрд╣
рдорд╛рдЗрдХреНрд░реЛрдлреНрд░реЗрдиреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред
Svelte рдЖрдк рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ рдЕрдЧрд░:
- рдЖрдк рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдврд╛рдВрдЪрд╛ рдЪреБрдирдирд╛ рд╣реИред
- рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рди рдЫреВрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдирдП рдШрдЯрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓, рдЖрдк Svelte рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ / рдпрд╛ рдЧрдВрднреАрд░ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдПрдХ рдкреВрд░реНрдг рдкреБрдирд░реНрд▓реЗрдЦрди рддрдХред рдЖрдк рдЗрд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдмрд╕ рдХреБрдЫ рдШрдЯрдХ рд▓реЗрдВ, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рд╕рд╛рде рдирдП рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯреЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╛рдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдХреЛрдб рдЖрдзрд╛рд░реЛрдВ рдкрд░ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЖрдк рдПрдХ рдпреВрдЖрдИ-рдХрд┐рдЯ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдФрд░ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред Svelte рдкрд░ UI-рдХрд┐рдЯ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИред
рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╣рдорд╛рд░реЗ
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рд╕реЗ рдЬреБрдбрд╝реЗрдВ!
рдЕрджреНрдпрддрди: рд╕рд╣реА
рд╕рд╡рд╛рд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
justboris ред рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд░реА:
import React, { PureComponent } from 'react'; import Widget from './Widget.svelte'; export default class extends PureComponent { componentDidMount() { ... this.widget = new Widget({ target: this.el, data: { username }, slots: { default: this.slot } }); ... } ... render() { return ( <div ref={el => this.el = el}> <div ref={el => this.slot = el}> {this.props.children} </div> </div> ); } }
<GithubWidget onChange={this.handleChange} username={this.state.username}> <p>Hello world</p> </GithubWidget>