рдпрд╣
"рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рддреБрд▓рдирд╛: рд░рд┐рдПрдХреНрдЯ, рд╡реАрдпреВ рдФрд░ рд╣рд╛рдЗрдкрд░рдПрдк" рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реЗрдЦ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдРрд╕реА рддреБрд▓рдирд╛рдУрдВ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рд╕реЗ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реАрдорд╛рдВрдд рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рд╣рд╛рдЗрдкрд░рдкреНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рд░рд┐рдПрдХреНрдЯ рдФрд░ рд╡реАрдпреВ рдЬреИрд╕реЗ рдорд╛рд╕реНрдЯреЛрдбреЛрди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдХреНрдпреЛрдВ рд╕реНрд╡реЗрд▓реЗрдЯ рдкрд░ рд╕рднреА рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рддрд╕реНрд╡реАрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдЪрдореБрдЪ 5 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!

рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдЖрдк
рд╕реНрд╡реЗрд▓реНрдЯ рдФрд░ рдЧрд╛рдпрдм рд╣реЛ рд░рд╣реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк
"рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ" рдФрд░
"рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд░реВрдкрд░реЗрдЦрд╛" рд▓реЗрдЦ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╛рдардХреЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд
рдореВрд▓ рд▓реЗрдЦ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдирдХрд▓ рдХреА рддрд╛рдХрд┐ рдпрд╣ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХреЗред рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдирдВрдмрд░ 1: рдХрд╛рдЙрдВрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛import React from "react"; import ReactDOM from "react-dom"; class Counter extends React.Component { constructor(props) { super(props); this.state = { count: 0}; } down(value) { this.setState(state => ({ count: state.count - value })); } up(value) { this.setState(state => ({ count: state.count + value })); } render() { return ( <div> <h1>{this.state.count}</h1> <button onClick = {() => this.down(1)}>-</button> <button onClick = {() => this.up(1)}>+</button> </div> ); } } ReactDOM.render(<Counter />, document.querySelector("#app"));
Vue import Vue from "vue"; new Vue({ data: { count: 0 }, methods: { down: function(value) { this.count -= value; }, up: function(value) { this.count += value; } }, render: function(h) { return( <div> <h1>{this.count}</h1> <button onClick={() => this.down(1)}>-</button> <button onClick={() => this.up(1)}>+</button> </div> ); }, el: "#app" });
Hyperapp import { h, app } from "hyperapp"; const state = { count: 0 }; const actions = { down: value => state => ({ count: state.count - value}), up: value => state => ({ count: state.count + value}) }; const view = (state, actions) => ( <div> <h1>{state.count}</h1> <button onclick={() => actions.down(1)}>-</button> <button onclick={() => actions.up(1)}>+</button> </div> ); app(state, actions, view, document.querySelector("#app"));
тЦНSvelte
<div> <h1>{count}</h1> <button on:click="set({count: count - 1})">-</button> <button on:click="set({count: count + 1})">+</button> </div>
тЖТ рдПрдХ
рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдгредтЦНAnaliz
рдПрдХ
Svelte рдШрдЯрдХ рдПрдХ html рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЦреНрдпрд╛рдд рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдШрдЯрдХ (SFC) рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдПрдХ рд░реВрдк рдореЗрдВ рдпрд╛ рджреВрд╕рд░реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
Vue ,
Ractive ,
Riot рдФрд░ рдХреБрдЫ рдЕрдиреНрдп
рдЪреМрдЦрдЯреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Html рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдШрдЯрдХ рдХреЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдШрдЯрдХ рдХреА рд╢реИрд▓реА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред
рдШрдЯрдХ рдХреЗ рдХрд┐рд╕реА рднреА рднрд╛рдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╣реА html-рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрдгрдирд╛ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд
рд╕реЗрдЯ () рдШрдЯрдХ рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2: рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ import React from "react"; import ReactDOM from "react-dom"; class PostViewer extends React.Component { constructor(props) { super(props); this.state = { posts: [] }; } getData() { fetch(`https://jsonplaceholder.typicode.com/posts`) .then(response => response.json()) .then(json => { this.setState(state => ({ posts: json})); }); } render() { return ( <div> <button onClick={() => this.getData()}>Get posts</button> {this.state.posts.map(post => ( <div key={post.id}> <h2><font color="#3AC1EF">{post.title}</font></h2> <p>{post.body}</p> </div> ))} </div> ); } } ReactDOM.render(<PostViewer />, document.querySelector("#app"));
Vue import Vue from "vue"; new Vue({ data: { posts: [] }, methods: { getData: function(value) { fetch(`https://jsonplaceholder.typicode.com/posts`) .then(response => response.json()) .then(json => { this.posts = json; }); } }, render: function(h) { return ( <div> <button onClick={() => this.getData()}>Get posts</button> {this.posts.map(post => ( <div key={post.id}> <h2><font color="#3AC1EF">{post.title}</font></h2> <p>{post.body}</p> </div> ))} </div> ); }, el: "#app" });
Hyperapp import { h, app } from "hyperapp"; const state = { posts: [] }; const actions = { getData: () => (state, actions) => { fetch(`https://jsonplaceholder.typicode.com/posts`) .then(response => response.json()) .then(json => { actions.getDataComplete(json); }); }, getDataComplete: data => state => ({ posts: data }) }; const view = (state, actions) => ( <div> <button onclick={() => actions.getData()}>Get posts</button> {state.posts.map(post => ( <div key={post.id}> <h2><font color="#3AC1EF">{post.title}</font></h2> <p>{post.body}</p> </div> ))} </div> ); app(state, actions, view, document.querySelector("#app"));
тЦНSvelte
<div> <button on:click="getData()">Get posts</button> {#each posts as {title, body}} <div> <h2><font color="#3AC1EF">{title}</font></h2> <p>{body}</p> </div> {/each} </div> <script> export default { methods: { getData() { fetch('https://jsonplaceholder.typicode.com/posts') .then(res => res.json()) .then(posts => this.set({ posts })); } } }; </script>
тЖТ рдПрдХ
рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдгредтЦНAnaliz
рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдХрд╛рд░реНрдмрди рдХреЙрдкреА рдХреА рддрд░рд╣, рдореВрд▓ рддреБрд▓рдирд╛ рд╕реЗ рд╕рднреА 3 рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ HTML рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ,
Svelte рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - HTML рдореЗрдВ js рдФрд░ css рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
< рд╕реНрдХреНрд░рд┐рдкреНрдЯ> рдФрд░
<рд╢реИрд▓реА> ред
рдШрдЯрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЗрдПрд╕ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреА рд╣реИред
рд╡рд┐рдзрд┐ рдЕрдиреБрднрд╛рдЧ рдШрдЯрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
рдЧреЗрдЯрдбрд╛рдЯрд╛ () рд╡рд┐рдзрд┐
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдбреЗрдЯрд╛ рдмрд╕ рдШрдЯрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд╢рди рд╕реВрдЪреА рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░ рдкреНрд░рдХрд╛рд╢рди рд╡рд╕реНрддреБ (рдкреЛрд╕реНрдЯ) рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
{#each posts as {title, body}}
рдпрд╣ рдЯреНрд░рд┐рдХ
{post.title} рдЬреИрд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЕрддрд┐рд░реЗрдХ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЫреЛрдЯреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
{рдЯрд╛рдЗрдЯрд▓} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕рд░рд▓
рдмрдирд╛рддрд╛ рд╣реИ ред
рдЙрджрд╛рд╣рд░рдг 3: рдЯреВ-рдбреВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдЖрдЗрдЯрдо рдШрдЯрдХ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ (рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА) function TodoItem(props) { return ( <li class={props.done ? "done" : ""} onclick={() => props.toggle(props.id)}> {props.value} </li> ); }
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ class TodoItem extends React.Component { render () { return ( <li class={this.props.done ? "done" : ""} onclick={() => this.props.toggle(this.props.id)}> {this.props.value} </li> ); } }
Vue var TodoItem = Vue.component("todoitem", { props: ["id", "value", "done", "toggle"], template: '<li v-bind:class="{done : done}" v-on:click="toggle(id)">{{value}}</li>' });
Hyperapp const TodoItem = ({ id, value, done, toggle }) = ( <li class={done ? "done" : ""} onclick={() => toggle(id)}> {value} </li> );
тЦНSvelte
<li class="{done ? 'done' : ''}" on:click="set({done: !done})">{value}</li>
тЖТ рдПрдХ
рдХрд╛рд░реНрдпрд╢реАрд▓ рдЙрджрд╛рд╣рд░рдгредтЦНAnaliz
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд╣рдо
рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ css рд╡рд░реНрдЧ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реВрдЪреА рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред
рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛
рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ : рдЕрдм рд╕реЗ, рдореИрдВрдиреЗ рд╣рд╛рдЗрдкрд░рдПрдк рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЯреЗрдмрд▓ рдмрд╕ рдЕрдкрдардиреАрдп рд╣реЛрдЧреАредтЦНAnaliz
рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ,
Svelte рдЕрддреНрдпрдВрдд рдиреНрдпреВрдирддрд░ рд╣реИред рдХреЗрд╡рд▓ 4 рд╣реБрдХ рд╣реИрдВ:
- onstate - рдШрдЯрдХ рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ DOM рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИред
- oncreate - рдЬрд┐рд╕ рдХреНрд╖рдг рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- onupdate - DOM рдореЗрдВ рдмрдврд╝рддреЗ рд╣реБрдП рддреБрд░рдВрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ DOM рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
- ondestroy - рддрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдШрдЯрдХ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ DOM рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд░реНрд╢рди рддреБрд▓рдирд╛
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рд╣реИред рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЦреБрдж рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рдмрд╣реБрдд рд╡рд┐рд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред
рдЯреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

тЦНLading, рд▓реЙрдиреНрдЪрд┐рдВрдЧ, рдХреЛрдб рдЖрдХрд╛рд░

рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

тЦНAnaliz
рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП,
рд╕реНрд╡реЗрд▓реНрдЯ рдХрд╛рдлреА рддреЗрдЬ рд╣реИ, рдЫреЛрдЯреА рдореЗрдореЛрд░реА ("рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рд╕рд╣рд┐рдд" рдЦрд╛рддреА рд╣реИ ", рдпрд╣ рдЬрд▓реНрджреА рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдЗрди 3 рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рдорд╛рдирджрдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдо рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЗрд╡рд▓
Svelte рдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдЧреНрд░реАрди" рдХреЙрд▓рдо рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЧрддрд┐ рдпрд╛ рд╕реНрдореГрддрд┐ рдЦрдкрдд рдпрд╛ рдЕрдиреНрдп рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХреГрддрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм рд╕реЗ, рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ, рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рджреЗрд╢реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо
Svelte рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдЬрд┐рддрдирд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рдФрд░ рдпрджреНрдпрдкрд┐ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╕рдореБрджрд╛рдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдорд╛рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ Vue рдХреА рддрд░рд╣ рд▓рдЪреАрд▓рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрд░ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдХреЗрд╡рд▓ рдПрдХ
рд▓реБрдкреНрддрдкреНрд░рд╛рдп рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕рдХреЗ рдкрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ
рд░рдирдЯрд╛рдЗрдо рдирд╣реАрдВ рд╣реИред
рдЗрд╕ рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддреЗрдЬреА рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрддреЗ рд╣реИрдВ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдорд╛рдВрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рдФрд░ рдЖрдХрд╛рд░ рдореЗрдВ рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреНрдп рдЪреМрдЦрдЯреЗ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
рд╕реНрд╡реЗрд▓реЗрдЯ рдХреЛ "рдореВрд▓ рд░реВрдк рд╕реЗ" рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдЧрд▓реА рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВред
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдЕрджреНрднреБрдд рдврд╛рдВрдЪреЗ рд╕реЗ рдорд┐рд▓реЗ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:
тЖТ
рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд░рдирд╛тЖТ
1Kb рд╕реНрд╡рддрдГ рдкреВрд░реНрдгтЖТ
SvelteJS: рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд░рд┐рд▓реАрдЬрд╝рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА
Svelte рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ SvelteJS рд╕реЗ рдЬреБрдбрд╝реЗрдВ ред рд╡рд╣рд╛рдВ рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд▓рд╛рд╣ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдирд╡реАрдирддрдо рд╕рдорд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЪреИрдЯрд┐рдВрдЧ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЖрдкрдХреЛ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА!