рдЖрдкрдиреЗ рдЕрд▓реНрдкрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд╕реБрдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ "Vue.js рдиреНрдпреВрдирддрдо рдкрд░ рд╣реИред" "рдорд┐рд▓реЗрдирд┐рдпрд▓реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп 1ред" рдЗрд╕реЗ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдореБрдЦреНрдп рдмрд╛рдд рд╕рдордЭреЗрдВред
рд╣рдореЗрдВ рджреВрд╕рд░реЗ рдврд╛рдВрдЪреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЦреИрд░, рдЕрд▓реНрдкрд╛рдЗрди рдЕрдкрдиреЗ рдЖрд▓рд╛ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЙрди рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд╣рд╛рдВ рдЗрди рдмрдбрд╝реЗ рдврд╛рдВрдЪреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ, рдПрдХ рдЯреНрд░реЗрдВрдбреА рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░, рдПрдХ рдмрд╣реБ-рдкреГрд╖реНрда рд╕рд╛рдЗрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдПрдХ рдлрд╛рд░реНрдо рдкреНрд░рд╛рдердорд┐рдХ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрдВ рдХреНрдпрд╛ рдХрд░реВрдВрдЧрд╛? рдореБрдЭреЗ jQuery рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП - рджреЛрд╕реНрддреЛрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛, рд╢реБрджреНрдз рдЬреЗрдПрд╕ рдкрд░ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рднреА il faut рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдХреЛрдгреАрдп рдФрд░ рджреГрд╢реНрдп рдЬрд╛рдирддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрдпрд╛ рд╣реИред HTML рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдм рдореИрдВ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░реВрдВ?
рдпрд╣рд╛рдБ рдЕрд▓реНрдкрд╛рдЗрди.рдЬреЗрдПрд╕ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, Vue рдпрд╛ React рдХреЛ рдкреЗрдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рд░рд┐рдПрдХреНрдЯ рдЙрдирдХреЗ рд╕рд╣реА рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреЛрдИ рднреА рдирд╣реАрдВ рд▓рд┐рдЦреЗрдЧрд╛, рдФрд░ рд╕реАрдбреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рдЗрди рдХрд┐рдП рдЧрдП рд╡реАрдпреВ рдХрд╛ рд╡рдЬрди 34 рдХреЗрдмреА (рдЕрд▓реНрдкрд╛рдЗрди рдХреЗ рд▓рд┐рдП 8.1 рдХреЗрдмреА) рд╣реЛрддрд╛ рд╣реИред рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪреБрдирд╛рд╡ рдЕрд▓реНрдкрд╛рдЗрди рдкрд░ рдкрдбрд╝рддрд╛ рд╣реИред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣рд╛рдБ рд╣реИрдмреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓реНрдкрд╛рдЗрди.рдЬреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд▓реЗрдЦ рдереЗ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рд╕рд╛рдЗрдЯ рдиреЗ рд╣рд░ рдЬрдЧрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреИрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛рдЯ рджрд┐рдП, рд▓реЗрдЦ рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рдирд┐рдХрд▓реЗред
рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ (рдкреВрд░рд╛ рдврд╛рдВрдЪрд╛ 13 рдирд┐рд░реНрджреЗрд╢ рдФрд░ 6 рдЬрд╛рджреВ рдЧреБрдг рд╣реИрдВ) рдФрд░ рдЬрд▓реНрдж рд╣реА рд░реВрд╕реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ (рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЕрдиреБрд╡рд╛рдж рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЕрдиреБрдореЛрджрди рдХреЗ рддрд╣рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ )ред
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ / рдпрд╛ Vue рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ Vue рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдкреНрд░рдореБрдЦ рдЕрдВрддрд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:
- рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо
v-
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ x-
, рдЕрд░реНрдерд╛рддреНред рдирд╣реАрдВ v-model
, рд▓реЗрдХрд┐рди x-model
; рдирд╣реАрдВ v-bind
, рд▓реЗрдХрд┐рди x-bind
рдХреНрдпреЛрдВ? рдпрд╣ рдЖрдкрдХрд╛ рд╣реЛрдорд╡рд░реНрдХ рд╣реИ :) x-if
x-for
template. Virtual DOM.{{}}
. x-text
x-html
, Vue.
.
, . . - ? тАУ . тАУ , , . тАУ " , " .. ..
, , .
HTML, CDN Alpine
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>To-Do Alpine.js</title>
<script
src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.3.5/dist/alpine.min.js"
defer
></script>
</head>
<body></body>
</html>
Alpine , . .
, ? . x-data
.
<div x-data="{ name: '' }">
<p>, <span x-text="name"></span></p>
</div>
<div>
, . name
<div>
.
, to-do. :
<div
x-data="{ todos: [{id: 1, title: ' ', completed: false}, {id: 2, title: ' ', completed: false}, {id: 3, title: ' ', completed: false}, {id: 4, title: ' ', completed: false}] }"
>
<h1> :</h1>
<ul>
<template x-for="todo in todos" :key="todo.id">
<li x-text="todo.title"></li>
</template>
</ul>
</div>
. , , CSS- .completed
, x-bind:class
( {[ ]: []}
). cursor: pointer
li
, .
<style>
.completed {
text-decoration: line-through;
}
li {
cursor: pointer;
}
</style>
<div
x-data="{ todos: [{id: 1, title: ' ', completed: false}, {id: 2, title: ' ', completed: false}, {id: 3, title: ' ', completed: false}, {id: 4, title: ' ', completed: false}], toggleTodo: function(id) { var todo = this.todos.find((todo) => todo.id === id); todo.completed = !todo.completed; } }"
>
<h1> :</h1>
<ul>
<template x-for="todo in todos" :key="todo.id">
<li
x-text="todo.title"
@click="toggleTodo(todo.id)"
:class="{'completed': todo.completed}"
></li>
</template>
</ul>
</div>
, , . , x-data
:
<div x-data="todos()">
<h1> :</h1>
<ul>
<template x-for="todo in todos" :key="todo.id">
<li
x-text="todo.title"
@click="toggleTodo(todo.id)"
:class="{'completed': todo.completed}"
></li>
</template>
</ul>
</div>
<script>
function todos() {
return {
todos: [
{ id: 1, title: ' ', completed: false },
{ id: 2, title: ' ', completed: false },
{ id: 3, title: ' ', completed: false },
{ id: 4, title: ' ', completed: false },
],
toggleTodo: function (id) {
var todo = this.todos.find((todo) => todo.id === id);
todo.completed = !todo.completed;
},
};
}
</script>
тАж Vue.
input :
<div x-data="todos()">
<div>
<h4> :</h4>
<input type="text" x-model="inputValue" />
<button @click="addTodo()"></button>
</div>
</div>
<script>
function todos() {
return {
inputValue: '',
addTodo: function () {
if (!this.inputValue) {
return;
}
this.todos.push({
id: Date.now(),
title: this.inputValue,
completed: false,
});
this.inputValue = '';
},
};
}
</script>
push()
, Alpine , - .
тАУ . <li>
span
: , тАУ .
<ul>
<template x-for="todo in todos" :key="todo.id">
<li @click="toggleTodo(todo.id)" :class="{'completed': todo.completed}">
<span x-text="todo.title"></span>
<span @click="deleteTodo(todo.id)">×</span>
</li>
</template>
</ul>
<script>
function todos() {
return {
deleteTodo: function (id) {
this.todos = this.todos.filter((todo) => todo.id !== id);
},
};
}
</script>
.
, , , REST API. , JSON Placeholder. x-init
.
<div x-data="todos()" x-init="fetchTodos()">
</div>
<script>
function todos() {
return {
todos: [],
fetchTodos: function () {
fetch('https://jsonplaceholder.typicode.com/todos')
.then((response) => response.json())
.then((data) => {
this.todos = data.slice(0, 10);
});
},
};
}
</script>
x-init
DOM ( created
Vue). тАУ , ( mounted
).
, ?_limit=10
, query , , .
. Alpine.js. . , . , , .
sandbox. , , .
рдкреАрдПрд╕ рдЗрдВрдЧреНрд▓рд┐рд╢ рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рднреА рдПрд▓реНрдкрд╛рдЗрди.рдЬреЗрдПрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ "рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХреНрдд" рд╕реНрдХреНрд░реИрдВрдХреЗрд╕реНрдЯ рдХреЛ рд╕рд▓рд╛рд╣ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╡рд╣ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдПрдХ рд▓рд┐рдВрдХ рднреА рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрдпрд╛ рд╣реИред рддреЛ рдареАрдХ рд╣реИ ред рдЗрд╕рдореЗрдВ, рд▓реЗрдЦрдХ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрд▓реНрдкрд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕рд╛ рдврд╛рдВрдЪрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред