рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ Vue.js рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓реЗрдХреЛрдирд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдкрд╛рд╡рд░ рд╕реЗ рдЗрддрдирд╛ рдкреНрдпрд╛рд░ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХреЗрд╡рд▓ рд╕рд┐рдВрдЧрд▓-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рд┐рдЦрдирд╛ рдЕрдЪрд╛рдирдХ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ jQuery рдпрд╛ рд╢реБрджреНрдз JS рдкрд░ рди рд▓реМрдЯреЗрдВ !?
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ Vue.js рдореЗрдВ (рдФрд░ рдХрдИ рдЕрдиреНрдп рдЪреМрдЦрдЯреЗ рдореЗрдВ) рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмреЗрдорд╛рдиреА рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдЕрд▓реНрдкрд╛рдЗрди.рдЬреЗрдПрд╕ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ ред
рдЖрдЗрдП рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
- рдЙрд╕рдХрд╛ рд╡рдЬрд╝рди рдмрд╣реБрдд рдХрдо рд╣реИ! 7.2kB рд╕рдВрдХреБрдЪрд┐рдд рд░реВрдк рдореЗрдВред
- рдкрд░рд┐рдЪрд┐рдд рдФрд░ рд╕рд░рд▓ рдирд┐рд░реНрджреЗрд╢ рдЖрдзрд╛рд░рд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ред
- рд╡рд░реНрдЪреБрдЕрд▓ рдбреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
- рд╕реАрдбреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕рдВрднрд╡ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрд░рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдПрдирдкреАрдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдореВрд▓ рдЙрджрд╛рд╣рд░рдг
<div x-data="{ msg: 'Hello, Habr!' }">
<input type="text" x-model="msg" />
<p x-text="msg"></p>
</div>
Playcode.io рдкрд░ рд╕рднреА рд▓реЗрдЦ рдХреЛрдб рджреЗрдЦреЗрдВ
, , x-data. , JSON- . . Dom-, .
x-data="{}"
, , , .
рдЕрдм рд╣рдо рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХреГрдкрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХреНрд╕-рдореЙрдбрд▓ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдПрдХ рдкрд╛рда <рдЗрдирдкреБрдЯ /> рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ V..s. рд╕реЗ рдЬреБрдбрд╝рд╡рд╛рдВ рд╡реА-рдореЙрдбрд▓ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рд╣реИред рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕рд╛рджреГрд╢реНрдп, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реИ! рд╕рдВрджреЗрд╢ рдХреЛ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рд▓рдЯрдХрд╛рдХрд░, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ 'рд╣реИрд▓реЛ, рд╣реИрдмрд░!' рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВред рдЕрдм рд╣рдо рдЗрд╕рдХрд╛ рдорд╛рди рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╣рдо рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВ, рдЬреЛ Vue.js рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдЖрджреА рд╣реИрдВ рдФрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдЪрд░ рдорд╛рдиреЛрдВ рдХрд╛ рд╕рд░рд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
<p>{{ msg }}</p>
Alpine.js рдореЗрдВ, рдпрд╣ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдкрд╛рдард╡рд┐рд╢реЗрд╖ x-text рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХреНрд╕-рдПрдЪрдЯреАрдПрдордПрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреВрд░реЗ рдорд╛рд░реНрдХрдЕрдк рдмреНрд▓реЙрдХ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИред
рдШрдЯрдирд╛ рд╕рджрд╕реНрдпрддрд╛
рдЙрджрд╛рд╣рд░рдг рдХреЛрдб: <div x-data="{ counter: 1 }">
<h1 x-text="counter"></h1>
<button x-on:click="counter++">+1</button>
</div>
x-on. Alpine.js , js-, . , , x-on тАФ @. :
<button @click="counter++">+1</button>
x-if:
<div x-data="{ show: false }">
<button
x-on:click="show = ! show"
x-text="show ? '' : ''"
></button>
<template x-if="show">
<p> !</p>
</template>
</div>
x-if, Vue.js. Boolean . . .
<div x-data="{ items: ['habr', 'hubr', 'hobr'] }">
<ol>
<template x-for="item in items" x-bind:key="item">
<li>
<p x-text="item"></p>
</li>
</template>
</ol>
</div>
x-for , . , , item. , , item , Alpine . ( ) key. key x-bind. x-for x-if , .
. github.
Alpine.js.
рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛ред
рд╕рдлрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ рдЬрд▓реНрдж рд╣реА рдорд┐рд▓рддреЗ рд╣реИрдВ!
рдЦреИрд░, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЕрдЪреНрдЫрд╛рдИ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрд┐рд╕реЗ рдЕрд▓реНрдкрд╛рдЗрди рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ:
- рдХрд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢
- рдЕрд╡рдпрд╡
- рд╢реИрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдорд░реНрдерди
- рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ...