рд░реЛрдЪрдХ рдЦрдмрд░ Vue 3

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдЧреНрд░рджреВрдд


Vue рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА FunCorp рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдмрд╛рд░реАрдХреА рд╕реЗ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рд▓рдЧрд╛рддрд╛рд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо VueStorefront рдХреЗ рд╕рд╣-рд╕рдВрд╕реНрдерд╛рдкрдХ рдлрд┐рд▓рд┐рдк рд░рдХреЛрд╡рд╕реНрдХреА рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдХреЛ рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирдП Vue 3 рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдХреЛрдб рд▓реЗрдЦрди рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЫрд╡рд┐
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрд╛ рдЬреЛ Vue 3 рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИрдВред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, Vue 3 рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

рдЖрдЗрдП рдПрдХ рдПрдкреАрдЖрдИ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ред

рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ


рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ, Vue рдХреЗ рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕рдмрд╕реЗ рдЪрд░реНрдЪрд┐рдд рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЖрдпреЛрдЬрди рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЕрдм рд╣рдо рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдПрдкреАрдЖрдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдШрдЯрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдг (рд╡рд┐рдХрд▓реНрдк) рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛, рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЧрдгрдирд╛, рдЖрджрд┐ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреМрди рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдпрд╣ рдХреИрд╕рд╛ рд╣реЛрдЧрд╛ред Vue рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛ рдпрд╛ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдБрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
Vue рдЯреАрдо рдХрдореНрдкреЛрдЬрд╝рд┐рд╢рди API рдХреЛ "рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ, рд╕реБрд╡рд┐рдзрд╛-рдЖрдзрд╛рд░рд┐рдд API рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рдШрдЯрдХ рддрд░реНрдХ рдореЗрдВ рд░рдЪрдирд╛ рдХреЗ рд▓рдЪреАрд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред" рдирдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

<template> <button @click="increment"> Count is: {{ count }}, double is {{ double }}, click to increment. </button> </template> <script> import { ref, computed, onMounted } from 'vue' export default { setup() { const count = ref(0) const double = computed(() => count.value * 2) function increment() { count.value++ } onMounted(() => console.log('component mounted!')) return { count, double, increment } } } </script> 

рд╣рдо рдХреЛрдб рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

 import { ref, computed, onMounted } from 'vue' 

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рдШрдЯрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдЧрдгрдирд╛рддреНрдордХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдХрд▓рд┐рдд рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдорд╛рдЙрдВрдЯреЗрдб рдЬреАрд╡рди рдЪрдХреНрд░ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдирдорд╛рдЙрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдпрд╣ рд░рд╣рд╕реНрдпрдордп рд╕реЗрдЯрдЕрдк рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╣реИ?

 export default { setup() {} } 

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕реЗрдЯрдЕрдк рд╕рд┐рд░реНрдл рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЧреБрдг рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕реЗрдЯрдЕрдк рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдФрд░ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЧреБрдгреЛрдВ, рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рд╣реБрдХ рдФрд░ рд╕рднреА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рд╕реЗрдЯрдЕрдк рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдПрдВрдЧреЗ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреАред

 const count = ref(0) 

рдЧрдгрдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдВрдкрддреНрддрд┐ рд░реЗрдлрд░реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрдХ рдЖрджрд┐рдо рдпрд╛ рд╡рд╕реНрддреБ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд▓рд┐рдВрдХ рджреЗрддрд╛ рд╣реИред рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдирд┐рд░реНрдорд┐рдд рд▓рд┐рдВрдХ рдХреЗ рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдЧрдгрдирд╛ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ count.value рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 const double = computed(() => count.value * 2) function increment() { count.value++ } 

рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рджреЛрд╣рд░реА рд╕рдВрдкрддреНрддрд┐ рдФрд░ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВред

 onMounted(() => console.log('component mounted!')) 

рдСрдирдорд╛рдЙрдВрдЯ рдХрд┐рдП рдЧрдП рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдВрд╕реЛрд▓ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВред

 return { count, double, increment } 

рддрд╛рдХрд┐ рдЧрдгрдирд╛ рдФрд░ рджреЛрд╣рд░рд╛ рдЧреБрдг рдФрд░ рд╡реЗрддрди рд╡реГрджреНрдзрд┐ рд╡рд┐рдзрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯрдЕрдк рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред

 <template> <button @click="increment"> Count is: {{ count }}, double is {{ double }}. Click to increment. </button> </template> 

рдФрд░ рд╡реЛрдЗрд▓рд╛! рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрдЯрдЕрдк рд╕реЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдкреБрд░рд╛рдиреЗ рд╡рд┐рдХрд▓реНрдк рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред

рдпрд╣ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╡рд┐рдХрд▓реНрдк рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдирдИ рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рдХрд╛ рд▓рд╛рдн рдПрдХ рдЕрд▓рдЧ рд╢реИрд▓реА рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЗрддрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рддрд░реНрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реА рдЧрдИ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рд╣реИред

рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛрдб


рдЖрдЗрдП рдирдИ рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд╛рднреЛрдВ рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдм, рдпрджрд┐ рд╣рдо рдХрдИ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдорд┐рдХреНрд╕рд┐рдиреНрд╕ рдФрд░ рд╕реНрдХреЛрдкреНрдб рд╕реНрд▓реЙрдЯреНрд╕ред рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдЕрдкрдиреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред

рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдФрд░ рдирдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд┐рд╢реНрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 import CounterMixin from './mixins/counter' export default { mixins: [CounterMixin] } 

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдореЗрдВ рдЬреЛ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рд╕рдордЭ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдореМрдЬреВрджрд╛ рдЧреБрдгреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдм рдПрдХ рд╕реАрдорд┐рдд рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рд╕реНрд▓реЙрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 <template> <Counter v-slot="{ count, increment }"> {{ count }} <button @click="increment">Increment</button> </Counter> </template> 

рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реА-рд╕реНрд▓реЙрдЯ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреМрди рд╕реЗ рдЧреБрдг рд╣реИрдВ, рдЬреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдХрд╛рдЙрдВрдЯрд░ рдШрдЯрдХ рдХреЗ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рд░рдЪрдирд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 function useCounter() { const count = ref(0) function increment () { count.value++ } return { count, incrememt } } export default { setup () { const { count, increment } = useCounter() return { count, increment } } } 

рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рджрд┐рдЦрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд╣рдо рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рджрд╛рдпрд░реЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд╛рдЙрдВрдЯрд░ рдЧреБрдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд╛рдЙрдВрдЯрд░ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕реБрдЦрдж рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдХреЛрдб рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдкрд╛рджрдХ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдФрд░ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо Vuex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде Vue рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред $ Store рд╕рдВрдкрддреНрддрд┐ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреЛрдбрд╝рддреЛрдбрд╝ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 const { commit, dispatch } = useStore() 

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

рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдмрдврд╝рддреЗ рдкрд░рд┐рд╡рд░реНрддрди


рдирдП Vue рдореЗрдВ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

 import Vue from 'vue' import App from './App.vue' Vue.config.ignoredElements = [/^app-/] Vue.use(/* ... */) Vue.mixin(/* ... */) Vue.component(/* ... */) Vue.directive(/* ... */) new Vue({ render: h => h(App) }).$mount('#app') 

рдЕрдм рд╣рдо рдирдП Vue рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Vue рдЧреНрд▓реЛрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред Vue рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдо рдЬреЛ рднреА рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ Vue 3 рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

 import { createApp } from 'vue' import App from './App.vue' const app = createApp(App) app.config.ignoredElements = [/^app-/] app.use(/* ... */) app.mixin(/* ... */) app.component(/* ... */) app.directive(/* ... */) app.mount('#app') 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рдерд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди createApp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Vue рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЕрдм рдХреЛрдИ рднреА рддреГрддреАрдп-рдкрдХреНрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ Vue рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИ, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдорд┐рдХреНрд╕рд┐рди рд╣реИ), рдЬреЛ Vue 3 рдореЗрдВ рдЕрд╕рдВрднрд╡ рд╣реИред

рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ RFC рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

рдЯреБрдХрдбрд╝реЗ


рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рдлреАрдЪрд░ рдЬрд┐рд╕реЗ рд╣рдо Vue 3 рдореЗрдВ рдЧрд┐рди рд╕рдХрддреЗ рд╣реИрдВред
рдЯреБрдХрдбрд╝реЗ рдХреНрдпрд╛ рд╣реИрдВ?
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдПрдХ рдШрдЯрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓ рддрддреНрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

 <template> <div>Hello</div> <div>World</div> </template> 

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкреА Vue рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рдПрдХ DOM рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдм рдХрдИ рдореВрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ Vue рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рд╕рдореБрджрд╛рдп рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИ, рдЗрд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдлреНрд░реИрдЧрдореЗрдВрдЯ рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 class Columns extends React.Component { render() { return ( <React.Fragment> <td>Hello</td> <td>World</td> </React.Fragment> ); } } 

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ Fragment рдПрдХ рдирд┐рдпрдорд┐рдд DOM рддрддреНрд╡ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдпрд╣ рдЖрднрд╛рд╕реА рд╣реИ рдФрд░ DOM рдЯреНрд░реА рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо DOM рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡ рдмрдирд╛рдП рдмрд┐рдирд╛ рдПрдХрд▓ рд░реВрдЯ рддрддреНрд╡ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдЖрдк Vue 2 рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Vue-fragments рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ Vue 3 рдореЗрдВ рд╡реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ!

рджреБрд╡рд┐рдзрд╛


рд░рд┐рдПрдХреНрдЯ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдФрд░ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ Vue 3 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ рд╕рд╕реНрдкреЗрдВрд╕ рд╣реИред

рд╕рд╕реНрдкреЗрдВрд╕ рдШрдЯрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рддрдХ рдПрдХ рд╕реНрдЯрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред Vue London рдореЗрдВ, Ewan Yu рдиреЗ рд▓рд╛рдкрд░рд╡рд╛рд╣реА рд╕реЗ рд╕рд╕реНрдкреЗрдВрд╕ рдХреЛ рдЫреБрдЖ рдФрд░ API рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╕реНрдкреЗрдВрд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ 2 рд╕реНрд▓реЙрдЯ рд╣реЛрдВрдЧреЗ: рдХрдВрдЯреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрдЯрдм рдХреЗ рд▓рд┐рдПред

 <Suspense> <template > <Suspended-component /> </template> <template #fallback> Loading... </template> </Suspense> 

рдЬрдм рддрдХ <рдирд┐рд▓рдВрдмрд┐рдд-рдШрдЯрдХ /> рдШрдЯрдХ рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рддрдм рддрдХ рд╕реНрдЯрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╕реНрдкреЗрдВрд╕ рдШрдЯрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдпрд╛ рд╕реЗрдЯрдЕрдк рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреБрдЫ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдПрдХрд╛рдзрд┐рдХ рд╡реА-рдореЙрдбрд▓


рд╡реА-рдореЙрдбрд▓ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рджреЛ-рддрд░рдлрд╝рд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд╛рд░реНрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред

 <input v-model="property" /> 

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реА-рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рд╣реБрдб рдХреЗ рддрд╣рдд, рд╡реА-рдореЙрдбрд▓ рдХреЗрд╡рд▓ рдореВрд▓реНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣рд╛ рд╣реИред

рдЖрдк рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 <input v-bind:value="property" v-on:input="property = $event.target.value" /> 

рдЖрдк рдореЙрдбрд▓ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 model: { prop: 'checked', event: 'change' } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рджреЛ-рддрд░рдлрд╝рд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡реА-рдореЙрдбрд▓ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА "рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░" рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рддрд┐ рдШрдЯрдХ рдХреЗрд╡рд▓ рдПрдХ рд╡реА-рдореЙрдбрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Vue 3 рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рд╣рдо рд╡реА-рдореЙрдбрд▓ рдХреЛ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рд╡реА-рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

 <InviteeForm v-model:name="inviteeName" v-model:email="inviteeEmail" /> 

рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ RFC рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

рдкреЛрд░реНрдЯрд▓


рдкреЛрд░реНрдЯрд▓ рд╡рд░реНрддрдорд╛рди рдШрдЯрдХ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд╣рд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ рд╣реИрдВред рдпрд╣ рднреА рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд░рд┐рдПрдХреНрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ, рдкреЛрд░реНрдЯрд▓реНрд╕ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: "рдкреЛрд░реНрдЯрд▓ рдЖрдкрдХреЛ рдПрдХ рдбреЛрдо рдиреЛрдб рдореЗрдВ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдбреЛрдо рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд╣рд░ рд╣реИред"

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

рдкреЛрд░реНрдЯрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореВрд▓ рдШрдЯрдХ рдХреА рд╢реИрд▓реА рдмрд╛рд▓ рдШрдЯрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдпрд╣ рдЖрдкрдХреЛ рдЧрдВрджреЗ z-index рд╣реИрдХреНрд╕ рд╕реЗ рднреА рдмрдЪрд╛рдПрдЧрд╛ред

рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд░реНрдЯрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕ рдЧрдВрддрд╡реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдкреЛрд░реНрдЯрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЛрд░реНрдЯрд▓- vue рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЬреЛ Vue 2 рдореЗрдВ рдкреЛрд░реНрдЯрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

 <portal to="destination"> <p>This slot content will be rendered wherever the portal-target with name 'destination' is located.</p> </portal> <portal-target name="destination"> <!-- This component can be located anywhere in your App. The slot content of the above portal component wilbe rendered here. --> </portal-target> 

рдФрд░ Vue 3 рдореЗрдВ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдЧреАред

рдирдпрд╛ рдХрд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢ рдПрдкреАрдЖрдИ


рдХрд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢ рдПрдкреАрдЖрдИ рдШрдЯрдХ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рд╕реЗ рдмреЗрд╣рддрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Vue 3 рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдирд╛ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢ рдХреА рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ:

 const MyDirective = { bind(el, binding, vnode, prevVnode) {}, inserted() {}, update() {}, componentUpdated() {}, unbind() {} } 

рдФрд░ Vue 3 рдореЗрдВ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 const MyDirective = { beforeMount(el, binding, vnode, prevVnode) {}, mounted() {}, beforeUpdate() {}, updated() {}, beforeUnmount() {}, // new unmounted() {} } 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕рдВрдЧрдд Vue рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдПрдкреАрдЖрдИ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢


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

рдКрдкрд░ рджреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдФрд░ рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрджрд┐ рдЖрдк рджреВрд╕рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ RFC рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рджреЗрдЦреЗрдВ ред

Source: https://habr.com/ru/post/hi475968/


All Articles