Vue.js: рдЖрдкрдХреЗ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рд╣реБрдХ


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

рдШрдЯрдХ рдореЗрдВ, рд╣рдо рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдмрдирд╛рдпрд╛ - рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдШреБрдбрд╝рд╕рд╡рд╛рд░ - рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реИ
  • рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрдЪреБрдЕрд▓ рдбреЛрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • рдирд╖реНрдЯ - рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдг рдирд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ
  • рдЖрджрд┐ рдкреНрд░рд▓реЗрдЦрди

рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рдХреЛрдб рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

// MyComponent.vue <template> <h1>Hello, {{ who }}</h1> </template> <script> export default { name: 'MyComponent', data() { return { who: 'world' } }, mounted() { //  -      } } </script> 

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

 //   ChildComponent.vue <template> <div> <div>Count: {{ counter }}</div> <button @click="add">+1</button> </div> </template> <script> export default { name: 'ChildComponent', data() { return { counter: 0 } }, updated() { this.$emit('updated') }, methods: { add() { this.counter++ } } } </script> 

 //   ParentComponent.vue <template> <div> <ChildComponent @updated="usefulMethod"/> </div> </template> <script> import ChildComponent from 'ChildComponent.vue' export default { name: 'ParentComponent', components: { ChildComponent }, data() { return {} }, methods: { usefulMethod() { //  -        } } } </script> 

рдорд╣рд╛рди, рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╕рдордп, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдШрдЯрдХ рдЕрджреНрдпрддрди рдШрдЯрдирд╛ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧреАрдореЗрдереЛрдб () рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ npm рдпрд╛ git рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рддреГрддреАрдп-рдкрдХреНрд╖ рдШрдЯрдХ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдпрд╣ рдмрдврд╝рддреЗ рд╣реИрдВ? рдПрдХ рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реБрдХ рдореЗрдВ, рдПрдХ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХ рдХреЗ рдХреЛрдб рдореЗрдВ рдЬрд╛рдУ ... рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ! рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ! рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕рд┐рд░реНрдл рдШрдЯрдирд╛ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ! рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХрд╛ рдирд╛рдо рдЬреАрд╡рдирдЪрдХреНрд░ рд╣реБрдХ рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди @hook: рдЙрдкрд╕рд░реНрдЧ @hook: рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП @hook: рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ @hook:___ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: @hook:mounted, @hook:updated @hook:destroyed ред

рдХреЛрдб рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 //   ParentComponent.vue <template> <div> <ThirdPartyComponent @hook:mounted="usefulMethod"/> </div> </template> <script> import ThirdPartyComponent from 'vue-third-party-component' //   export default { name: 'ParentComponent', components: { ThirdPartyComponent }, data() { return {} }, methods: { usefulMethod() { //  -    mounted     } } } </script> 

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

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЧреЛрджреА рдФрд░ рд╕реНрд░реЛрдд рдкрдврд╝реЗрдВ! рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдирдП рд╕рд╛рд▓ 2020 рдХреЗ рд╕рд╛рде!

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


All Articles