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

рдЪреВрдБрдХрд┐ рдореЗрд░рд╛ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡ рдХреЛрдгреАрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рд╕реНрд╡реЗрд▓ рдХреЛ рд╕реАрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛: Svelte рдореЗрдВ рд╡рд╣реА рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдгреАрдп рдореЗрдВред
рдиреЛрдЯ: рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореИрдВ рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдЦ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЗрд▓реНрдЯ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рдкрд░рд┐рдЪрдп рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдореБрдЦреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдгреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЪреЗрддрд╛рд╡рдиреА рдмрд┐рдЧрд╛рдбрд╝рдиреЗ рд╡рд╛рд▓рд╛: Svelte рдордЬреЗрджрд╛рд░ рд╣реИред
рдШрдЯрдХреЛрдВ
Svelte рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Button.svelte
рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рджреЗрдХрд░ Button
рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреЗрд╢рдХ, рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдХреЛрдгреАрдп рдореЗрдВ рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд╛рде рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдореНрдореЗрд▓рди рд╣реИред (Svelte рдореЗрдВ, рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХрд╛ рдирд╛рдо рднреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЕрдиреБрд╡рд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдиреЛрдЯ рдХрд░реЗрдВ)
Svelte рдШрдЯрдХ рдПрдХрд▓-рдлрд╝рд╛рдЗрд▓ рд╣реИрдВ, рдФрд░ 3 рдЦрдВрдбреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ: script
, style
рдФрд░ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЯреИрдЧ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЪрд▓реЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдЖрдпрд╛рдд рдШрдЯрдХ
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдПрдХ рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЗ рд╕рд╛рде:
- рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
.svelte
рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ .svelte
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдШрдЯрдХ
<script>
рдЕрдВрджрд░ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
<script> import Todo from './Todo.svelte'; </script> <Todo></Todo>
рдЙрдкрд░реЛрдХреНрдд рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕реНрд╡реЗрд▓реНрдЯреЗ рдореЗрдВ рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рд╣реИред рдмреЗрд╢рдХ, рдХреБрдЫ рдирд┐рд╣рд┐рддрд╛рд░реНрде рдФрд░ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ рдХрд┐ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рдПред
рдореВрд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛
рдкреНрд░рдХреНрд╖реЗрдк
рд╕реНрд╡реЗрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рдХреНрд╖реЗрдк, рд╡реЗрд╡ рдпрд╛ рдХреЛрдгреАрдп рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдЕрднрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ:
<script> let someFunction = () => {...} </script> <span>{ 3 + 5 }</span> <span>{ someFunction() }</span> <span>{ someFunction() ? 0 : 1 }</span>
рдореБрдЭреЗ рдбрдмрд▓ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХрднреА-рдХрднреА рд╕реАрд▓ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдЧреБрдг
рдШрдЯрдХреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкрд╛рд╕ рдХрд░рдирд╛ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
//Svelte <script> let isFormValid = true; </script> <button disabled={!isFormValid}></button>
рдШрдЯрдирд╛рдУрдВ
рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ: on:={}
ред
<script> const onChange = (e) => console.log(e); </script> <input on:input={onChange} />
рдХреЛрдгреАрдп рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдореЗрдВ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рдмрд╛рдж рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
<input on:input={(e) => onChange(e, 'a')} />
рдРрд╕реЗ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдкрд░ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░:
- рд╣рдореЗрдВ рдХрдо рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдФрд░ рдХреЛрд╖реНрдардХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╡реИрд╕реЗ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИред
- рдФрд░ рдХрдард┐рди рдкрдврд╝реЗрдВред рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрдЬрд╛рдп рдХреЛрдгреАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рдФрд░ рд╕реНрд╡реЗрд▓реНрдЯреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓реЗрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реА рдЖрджрдд рд╣реИ рдФрд░ рдореЗрд░реА рд░рд╛рдп рдХреБрдЫ рд╣рдж рддрдХ рдкрдХреНрд╖рдкрд╛рддрдкреВрд░реНрдг рд╣реИред
рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдирд┐рд░реНрджреЗрд╢
Vue рдФрд░ Angular рдореЗрдВ рд╕рдВрд░рдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, Svelte рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдЫреЛрд░реЛрдВ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
{#if todos.length === 0} {:else} {#each todos as todo} <Todo {todo} /> {/each} {/if}
рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд HTML рддрддреНрд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реА рдореИрдХрдмреБрдХ рдХреЗ рдмреНрд░рд┐рдЯрд┐рд╢ рдХреАрдмреЛрд░реНрдб рд▓реЗрдЖрдЙрдЯ рдореЗрдВ #
рдкреНрд░рддреАрдХ рдПрдХ рджреБрд░реНрдЧрдо рд╕реНрдерд╛рди рдкрд░ рд╣реИ, рдФрд░ рдпрд╣ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрдирдкреБрдЯ рдЧреБрдг
рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЬреЛ рдПрдХ рдШрдЯрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреЛрдгреАрдп рдореЗрдВ @Input
рдЕрдиреБрд░реВрдк) export
рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рдЪрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИ:
<script> export let todo = { name: '', done: false }; </script> <p> { todo.name } { todo.done ? 'тЬУ' : 'тЬХ' } </p>
- рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ
todo
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИ: рдпрд╣ рдбрд┐рдлреЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рд╡реИрд▓реНрдпреВ рд╣реЛрдЧреА, рдЕрдЧрд░ рдпрд╣ рдкреИрд░реЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
рдЕрдм рдЗрд╕ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдВ, рдЬреЛ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛:
<script> import Todo from './Todo.svelte'; const todos = [{ name: " Svelte", done: false }, { name: " Vue", done: false }]; </script> {#each todos as todo} <Todo todo={todo}></Todo> {/each}
рдПрдХ рдирд┐рдпрдорд┐рдд JS рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдорд╛рди, todo={todo}
рдХреЛ рдЫреЛрдЯрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<Todo {todo}></Todo>
рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ рдЧреБрдг
@Output
рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдореВрд▓ рдШрдЯрдХ @Output
рдмрдЪреНрдЪреЗ рд╕реЗ рдХреЛрдИ рд╕реВрдЪрдирд╛ @Output
, рддреЛ рд╣рдо createEventDispatcher
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ Svelte рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
createEventDispatcher
рдлрд╝рдВрдХреНрд╢рди рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ dispatch
рдЪрд░ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВdispatch
рд╕рдорд╛рд░реЛрд╣ рдХреЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдбреЗрдЯрд╛ (рдЬреЛ рдШрдЯрдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ detail
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЖрдПрдЧрд╛)- рд╣рдо
markDone
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ dispatch
markDone
рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ ( on:click
) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
<script> import { createEventDispatcher } from 'svelte'; export let todo; const dispatch = createEventDispatcher(); function markDone() { dispatch('done', todo.name); } </script> <p> { todo.name } { todo.done ? 'тЬУ' : 'тЬХ' } <button on:click={markDone}></button> </p>
рдореВрд▓ рдШрдЯрдХ рдореЗрдВ, рдЖрдкрдХреЛ done
рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк todo
рд╕рд░рдгреА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХреЗрдВред
onDone
рдлрдВрдХреНрд╢рди рдмрдирд╛рдПрдВ- рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
on:done={onDone}
<script> import Todo from './Todo.svelte'; let todos = [{ name: " Svelte", done: false }, { name: " Vue", done: false }]; function onDone(event) { const name = event.detail; todos = todos.map((todo) => { return todo.name === name ? {...todo, done: true} : todo; }); } </script> {#each todos as todo} <Todo {todo} on:done={onDone}></Todo> {/each}
рдиреЛрдЯ: рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдореНрдпреВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо todos
рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдПрдХ рдирдИ рд╕рд╛рд░рдгреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдп рдХреА рд╡рд╕реНрддреБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рд╣реЛ рдЬрд╛рдПрдЧреАред
рдЗрд╕рд▓рд┐рдП, рд╕реНрд╡реЗрд▓реЗрдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рде, рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
ngModel
рдПрдХ рдШрдЯрдХ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рдмрд╛рдВрдзрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Svelte рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ bind:<>={}
рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ bind:<>={}
ред
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
<script> let name = ""; let description = ""; function submit(e) { </script> <form on:submit={submit}> <div> <input placeholder="" bind:value={name} /> </div> <div> <input placeholder="" bind:value={description} /> </div> <button> </button> </form>
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛, Svelte рдЪрд░ рдХреЛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ todos
рд╕рд░рдгреА рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
let allDone = todos.every(({ done }) => done);
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реНрдпреВ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рд░рдгреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ allDone
рд╡реЗрд░рд┐рдПрдмрд▓ allDone
рдорд╛рди рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ "рд▓реЗрдмрд▓" рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рдПрдЧрд╛:
$: allDone = todos.every(({ done }) => done);
рдпрд╣ рдмрд╣реБрдд рд╣реА рд╡рд┐рджреЗрд╢реА рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрд╛рджреВ" рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЯреИрдЧ рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ ред
рдЙрдкрд░реЛрдХреНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЫреЛрдЯрд╛ рдбреЗрдореЛ:

рд╕рд╛рдордЧреНрд░реА рдЗрдВрдЬреЗрдХреНрд╢рди
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрд▓реЙрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдШрдЯрдХ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╢реЗрд╖ slot
рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
// Button.svelte <script> export let type; </script> <button class.type={type}> <slot></slot> </button> // App.svelte <script> import Button from './Button.svelte'; </script> <Button> </Button>
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, ""
<slot></slot>
рддрддреНрд╡ рдХреА рдЬрдЧрд╣ рд▓реЗрдЧреАред
рдирд╛рдорд┐рдд рд╕реНрд▓реЙрдЯреНрд╕ рдХреЛ рдирд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛:
// Modal.svelte <div class='modal'> <div class="modal-header"> <slot name="header"></slot> </div> <div class="modal-body"> <slot name="body"></slot> </div> </div> // App.svelte <script> import Modal from './Modal.svelte'; </script> <Modal> <div slot="header"> </div> <div slot="body"> </div> </Modal>
рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рд╣реБрдХ
Svelte 4 рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ svelte
рдкреИрдХреЗрдЬ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- onMount - DOM рдореЗрдВ рдПрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдкрд╣рд▓реЗ рдЕрджреНрдпрддрди - рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреБрд▓рд╛рдпрд╛
- afterUpdate - рдШрдЯрдХ рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
- onDestroy - рдПрдХ рдШрдЯрдХ рдХреЛ DOM рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
onMount
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ DOM рдореЗрдВ рдШрдЯрдХ рдХреЛ рд░рдЦреЗ рдЬрд╛рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдпрд╣ ngOnInit
рд╣реБрдХ ngOnInit
рд╕рдорд╛рди рд╣реИред
рдпрджрд┐ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдШрдЯрдХ рдХреЛ DOM рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
<script> import { onMount, beforeUpdate, afterUpdate, onDestroy } from 'svelte'; onMount(() => console.log('', todo)); afterUpdate(() => console.log('', todo)); beforeUpdate(() => console.log(' ', todo)); onDestroy(() => console.log('', todo)); </script>
рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ onMount
рдХреЙрд▓ рдХрд░рддреЗ onMount
рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдКрдкрд░ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, todo
рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди
рд╕реНрд╡реЗрд▓реНрдЯ рдореЗрдВ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рд╕реА рдФрд░ рд╕реЗ рдЕрдзрд┐рдХ рдореЗрд░реЗ рд╕рд╛рде рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддрд╛ рд╣реИред Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХреЛрдб рдХреА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рднрдВрдбрд╛рд░рдг рдФрд░ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рдг рдмрдирд╛рдПрдВрдЧреЗред
рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╛рд▓реНрдЯреНрд╕
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ svelte/store
рдкреИрдХреЗрдЬ рд╕реЗ writable
рд╕реНрдЯреЛрд░реЗрдЬ writable
рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп initialState
рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛
import { writable } from 'svelte/store'; const initialState = [{ name: " Svelte", done: false }, { name: " Vue", done: false }]; const todos = writable(initialState);
рдЖрдорддреМрд░ рдкрд░, рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреЛрдб todos.store.js
рдЬреИрд╕реЗ рдХрд┐ todos.store.js
рдФрд░ todos.store.js
рд╕реЗ рд╕реНрдЯреЛрд░реЗрдЬ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдореИрдВ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, todos
рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдм рдПрдХ рднрдВрдбрд╛рд░ рдмрди рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИред рднрдВрдбрд╛рд░рдг рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Svelte рдореЗрдВ рдереЛрдбрд╝рд╛ рдЬрд╛рджреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
- рд╕реНрдЯреЛрд░реЗрдЬ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдирд╛рдо рдореЗрдВ
$
рд╡рд░реНрдг рдЬреЛрдбрд╝рдХрд░, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рддрдХ рд╕реАрдзреА рдкрд╣реБрдБрдЪ рдорд┐рд▓рддреА рд╣реИ!
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХреЗрд╡рд▓ рдХреЛрдб рдХреЗ рд╕реНрдерд╛рди рдкрд░ $todos
рд╕рд╛рде todos
рдЪрд░ рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
{#each $todos as todo} <Todo todo={todo} on:done={onDone}></Todo> {/each}
рд░рд╛рдЬреНрдп рдХреА рд╕реНрдерд╛рдкрдирд╛
рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛ рдирдпрд╛ рдорд╛рди set
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ:
const todos = writable(initialState); function removeAll() { todos.set([]); }
рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрди
рднрдВрдбрд╛рд░рдг (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, todos
) рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЛ update
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд░рд╛рдЬреНрдп рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
рд╣рдо рдЙрд╕ onDone
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ onDone
рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдерд╛:
function onDone(event) { const name = event.detail; todos.update((state) => { return state.map((todo) => { return todo.name === name ? {...todo, done: true} : todo; }); }); }
рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдШрдЯрдХ рдореЗрдВ рд╕реАрдзреЗ рдПрдХ reducer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ред
рд╕реНрдерд┐рддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╕рджрд╕реНрдпрддрд╛
рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореВрд▓реНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЖрдк subscribe
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХ observable
рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
const subscription = todos.subscribe(console.log); subscription();
observables
рдпрджрд┐ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдиреЗ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЙрддреНрд╕рд╛рд╣ рдкреИрджрд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдпрд╣ рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, RxJS рд╕рдорд░реНрдерди рдХреЛ Svelte рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ ECMAScript рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ рдХреЛрдгреАрдп рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ async рдкрд╛рдЗрдк рд╕рдордХрдХреНрд╖ рдХреА рдХрдореА рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рд╕реНрд╡реЗрд▓реНрдЯ рдиреЗ рдореБрдЭреЗ рдпрд╣рд╛рдВ рднреА рд╣реИрд░рд╛рди рдХрд░ рджрд┐рдпрд╛ред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдпреЗ рдЙрдкрдХрд░рдг рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: "Svelte"
рдХреАрд╡рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЧрдП рдЧрд┐рддреВрдм рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ REPL рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
<script> import rx from "https://unpkg.com/rxjs/bundles/rxjs.umd.min.js"; const { pluck, startWith } = rx.operators; const ajax = rx.ajax.ajax; const URL = `https://api.github.com/search/repositories?q=Svelte`; const repos$ = ajax(URL).pipe( pluck("response"), pluck("items"), startWith([]) ); </script> {#each $repos$ as repo} <div> <a href="{repo.url}">{repo.name}</a> </div> {/each}
$
рдкреНрд░рддреАрдХ рдХреЛ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдЪрд░ repos$
рдХреЗ рдирд╛рдо рд╕реЗ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реНрд╡реЗрд▓реНрдЯ рд╕реНрд╡рддрдГ рд╣реА рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
Svelte рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд░реНрдерди
рдПрдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рдЧрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди Svelte рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрджрдд рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдореИрдВ рджреВрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭреЗ рдлрд┐рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ Svelte рдЬрд▓реНрдж рд╣реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдЗрдЯрдо рдХрд┐рд╕реА рдХреА рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА рдкрд░ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдВрдЧреБрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рд╕реНрд╡реЗрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рд╕рдордЭреМрддреЗ рдФрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢
<script>
рдмреНрд▓реЙрдХ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рд╕реНрд╡рдЪреНрдЫ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдШрдЯрдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реЗрд▓реНрдЯ рд╕рдореБрджрд╛рдп рдХрдИ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдФрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╕рдореБрджрд╛рдп рдХрд╛ рд╕рдорд░реНрдерди
рд╕реНрд╡реЗрд▓реНрдЯ рдПрдХ рднрд╡реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬреЛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдкреИрдХреЗрдЬ, рдореИрдиреБрдЕрд▓, рдмреНрд▓реЙрдЧ рд▓реЗрдЦ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреА рд╣реИ рдФрд░ рдлреНрд░рдВрдЯреЗрдВрдб рд╡рд┐рдХрд╛рд╕ рдХреА рдЕрджреНрднреБрдд рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЙрдкрдХрд░рдг рдмрди рд╕рдХрддреА рд╣реИ рдЬреЛ рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рдерд╛, Svelte 3 рдиреЗ рдореБрдЭ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рдЫрд╛рдк рдЫреЛрдбрд╝реАред рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдЫреЛрдЯрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╕рдкрд╛рд╕ рдХреА рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЗрддрдирд╛ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдореБрдЭреЗ рдЙрд╕ рдЙрддреНрддреЗрдЬрдирд╛ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛ рджреА рдЬреЛ рдореИрдВрдиреЗ рдЕрдиреБрднрд╡ рдХреА рдереА рдЬрдм рдореИрдВрдиреЗ jQuery рд╕реЗ рдХреЛрдгреАрдп рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдерд╛ред
рднрд▓реЗ рд╣реА рдЕрдм рдЖрдк рдХрд┐рд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рд▓рд░реНрдирд┐рдВрдЧ рд╕реЗрд╡реЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдШрдВрдЯреЗ рд▓рдЧрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдорддрднреЗрджреЛрдВ рдХреЛ рд╕рдордЭ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Svelte рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ @sveltejs рдореЗрдВ рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдорд┐рд▓реЗрдВрдЧреЗ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдЪреМрдЦрдЯреЗ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╣реИ рдФрд░ рд╡реЗ рд╕реНрд╡реЗрд▓реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдХрд╣рд╛рдирд┐рдпреЛрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред