Vue: [реи.реж] рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдХреНрддреВре░ 2016  ┬╖  34рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vuejs/vue

рдореИрдВ рдорд╛рдирдХ рдШрдЯрдХреЛрдВ рдХреА рддрд░рд╣ рд╣реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ .vue рдлрд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рдЗрд╕ рдкрд╣реЗрд▓реА рдореЗрдВ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдмреВрдд рдмрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╣реИрдХреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкрд╛рд╕ functional рд╡рд┐рдХрд▓реНрдк рд╣реЛ рдЬрд┐рд╕рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ context рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рди рдХрд┐ this ред

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

Vue.component('test', {
  functional: true',
  props: ['msg'],
  template: `<div>
    <h1>{{props.msg}}</h1>
    <h2>Static content</h2>
    <span v-for="n in 10">{{n}} </span>
    <button @click="console.log('click', props.msg)"><slot></slot></button>
  </div>`,
});

рдпрд╛:

<template>
  <div class="test">
    <h1>{{props.msg}}</h1>
    <h2>Static content</h2>
    <span v-for="n in 10">{{n}} </span>
    <button @click="console.log('click', props.msg)"><slot></slot></button>
  </div>
</template>

<script>
export default {
  functional: true,
  props: ['msg'],
}
</script>

<style scoped>
.test {
  margin: 12;
}
</style>

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣рд╛ рд╣реИред

рд╕рднреА 34 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд░реЛрдбрдореИрдк рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЗрд╕реЗ рддрдм рддрдХ рд╕реНрдердЧрд┐рдд рд░рдЦреЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ 2.0 рд╡рд░реНрддрдорд╛рди рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рдХреЗ рдЪрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2.0 рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЬреЛ рдХрд╛рдо рдмрдЪрд╛ рд╣реИ, рд╡рд╣ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рд╣реА рд╣реЛрдиреЗ, рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ (рднреА , рдЗрд╕рдХреЗ рд╕рд╛рде vue-loader/vueify рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЖрджрд┐ pp.)

рдкреАрдУрд╕реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдорджрджрдЧрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ!

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

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдкрд░ рджрд╛рдпрд░ рдХрд░рдирд╛ред

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдШрдЯрдХ рдкрд░ рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдХрд╛рдлреА рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ n00b рдХреЗ рд▓рд┐рдП рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рдЬреЛ рд╣реИ рдЙрд╕рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдЗрд╕рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рдЖрдк рдЗрд╕ рддрд░рд╣ .vue рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ:

<template functional>
  <div class="test">
    <h1>{{props.msg}}</h1>
    <h2>Static content</h2>
    <span v-for="n in 10">{{n}} </span>
    <button @click="console.log('click', props.msg)"><slot></slot></button>
  </div>
</template>

<script>
export default {
  props: ['msg'],
}
</script>

<style scoped>
.test {
  margin: 12;
}
</style>

рдЖрд╣ рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж !!

рдЙрд╕рдХрд╛ рджрд┐рдЦрдирд╛ рдмрд╣реБрдд рд╣реА рдмрдврд╝рд┐рдпрд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреА рд╕рдордп рд╕реАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ!

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдХреНрдпрд╛ рдпрд╣ 2.3 рд░рд┐рд▓реАрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛?

@Akryum рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣реАрдиреЛрдВ рд╕реЗ рдЕрдзрд░ рдореЗрдВ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

/рдкрд┐рдВрдЧ @ рдмреНрд▓реЗрдХ-рдиреНрдпреВрдореИрди

рдХреНрдпрд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЦрдмрд░ рд╣реИ?

рд▓рдЧрддрд╛ рд╣реИ рдЗрд╕ рдкрд░ рдлрд░рд╡рд░реА рдореЗрдВ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: https://github.com/vuejs/vue/tree/feature/fn-templates

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ? рдЕрдм рдХреБрдЫ рд╕рдордп рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@Akryum рдлрд░рд╡рд░реА рдореЗрдВ рдЖрдкрдХреЗ рдЯреАрдЬрд╝рд░ рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣ рдкрд╛рдиреА рдореЗрдВ рдореГрдд рд▓рдЧ рд░рд╣рд╛ рд╣реИред @ рдмреНрд▓реЗрдХ-рдиреНрдпреВрдореИрди рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдкрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ?

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдкрд░реЗрд╢рд╛рди рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

@scottbedard рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдХреБрдЫ рдЫрд┐рдкреЗ рд╣реБрдП рдЧреЛрдЪрд░ рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЕрдиреБрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рдо рдХрд╛рдлреА рд╕рдордп рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдореИрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@vuejs/рд╕рд╣рдпреЛрдЧреА рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдХреНрдпрд╛ рд░рд╛рдп рд╣реИ, рдХреНрдпрд╛ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдореВрд▓ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдЧрдд рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреАрдЪрд░ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рдЖрдИрдПрдордПрдЪрдУ рдШрдЯрдХреЛрдВ (рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд) рд╕реЗ рд╕рднреА рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдбрд┐рдХреВрдк рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рджрд╛рдпрд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рдЬреЗрдПрд╕рдПрдХреНрд╕/рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред рдП

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд┐рдВрджреБ рдкрд░, рдмрд╛рдзрд╛рдПрдВ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЙрдбрд▓ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рдирдЯрд╛рдЗрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (https://github.com/vuejs/vue/commit/f63203310f01e9f0813e0316c308f9f21d0ee717#diff-4d479bb000ed54582de8e4cd8318ef64R157) рдФрд░ рдХрднреА рднреА рд╢реБрджреНрдз рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рд╕рд╛рде рд╣реА, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЛрдкреНрдб рд╕реНрдЯрд╛рдЗрд▓ рд╕рдорд░реНрдерди рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред рдЬрдм рддрдХ рдХреЛрдИ рдкреНрд░рддрд┐рдЧрдорди рди рд╣реЛ?

рд░рд┐рдПрдХреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Vue рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рдереЛрдбрд╝реЗ рдмрджрд╕реВрд░рдд рд╣реИрдВред template jsx рддреБрд▓рдирд╛ template рдмрд╣реБрдд рдХрдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред рд╢рд╛рдпрдж рдЖрдк рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП vue-loader рдЙрдзрд╛рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣:

<script functional>
const DumbCmp = props => (
  <Button>{props.label}</Button>
);

export default DumbCmp;
</script>

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдпрд╣ рд╕реЗрд╡рд╛ рдорд╣реАрдиреЛрдВ рдкрд╣рд▓реЗ рдХреА рд╣реИ https://github.com/nickmessing/babel-plugin-jsx-vue-functional

рдХреНрдпрд╛ рд╣рдо рдЗрд╕реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? https://github.com/vuejs/vue/commit/ea0d227d2ddfa5fc5e1112acf9cd485b4eae62cb

рд╣рд╛рдВ, Vue 2.5 + vue-loader 13.3 рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдХрд▓рди, рд╕реНрдХреЛрдкреНрдб CSS рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛ :)

рдХреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рд╕реЗ $ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

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

рдХреБрдЫ рд╣реИрдХрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдВрдбрд░ fn рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдореЗрдВ рдПрдХ parent рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ Vue рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк context.parent.$emit() рдпрд╛ context.parent.$root.$emit() рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ рд╕реЗ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдЕрд░реЗ, рдореИрдВ рдЕрдкрдиреЗ рдХреБрдЫ рдбреИрд╢рдмреЛрд░реНрдб рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдПрд╕рдПрдлрд╕реА рдШрдЯрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдзреНрд╡рдирд┐ рдмрдирд╛рдиреЗ рдореЗрдВ рд╢реЛрдз рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╣рд╛рдВ рдХреЛрдИ рд╡рд┐рдзрд┐ рдпрд╛ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдкреНрд░реЛрдк рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛, рд╣реИ рдирд╛?
рдпрджрд┐ рдореИрдВ рдПрдХ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдХрдо рд╕реЗ рдХрдо рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рд╣реА?

рдХреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рд╕реЗ $ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдЖрдк рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдВрджрд░реНрдн рдкрд░ listeners рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

<my-functional-component @request-something="onRequestSomething" />

рд╢реНрд░реЛрддрд╛ рдХреЛ my-functional-component рдЕрдВрджрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рдХреЙрд▓ рдХрд░реЗрдВ:

listeners['request-something'](42)

рдпрджрд┐ рдореИрдВ рдПрдХ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдХрдо рд╕реЗ рдХрдо рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╕рд╣реА?

рд╣рд╛рдВред

@Akryum рдзрдиреНрдпрд╡рд╛рджред рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ, рдЕрдзрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд░реА func рдШрдЯрдХ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдЪреАрдЬреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдард┐рди рдмрдирд╛ рджреЗрдВрдЧреЗред рдЗрди рдкрд░ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореАрдард╛ рд╣реЛрдЧрд╛ :)

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

рд╢реБрдХреНрд░, рел рдЬрдирд╡рд░реА, реирежрезрео рдХреЛ рд╕реБрдмрд╣ рек:релрей рдмрдЬреЗ, рдбреЛрдмреНрд░реЛрдорд┐рд░ рд╣реНрд░рд┐рд╕реНрддреЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@Akryum https://github.com/akryum рдзрдиреНрдпрд╡рд╛рджред рдмрдбрд╝рд╛, рдЕрдзрд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рднрд╛рд░реА
JSX рдХреЗ рд╕рд╛рде func рдШрдЯрдХ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рд░реЗрдВрдбрд░
рдХрд╛рд░реНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдард┐рди рдмрдирд╛ рджреЗрдВрдЧреЗред рдПрдХ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
рдЗрди рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореАрдард╛ рд╣реЛрдЧрд╛ :)

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/vuejs/vue/issues/3977#issuecomment-355514921 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AACouk0kTLUHRjQDnXj2vn2v4Rq7maXOks5tHfExgaJpZM4KaIfu
.

@blocka рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд╛рд░реНрдЯ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░реЗрдВ?

рдЬрдм рддрдХ рдЖрдк рдПрдХ рдЪрд╛рд░реНрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ vnodes рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА a
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдШрдЯрдХ

рд╢реБрдХреНрд░, рел рдЬрдирд╡рд░реА, реирежрезрео рдХреЛ рд╕реБрдмрд╣ рел:рекрез рдмрдЬреЗ, рдбреЛрдмреНрд░реЛрдорд┐рд░ рд╣реНрд░рд┐рд╕реНрддреЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@blocka https://github.com/blocka рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ
рдХреБрдЫ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд╛рд░реНрдЯ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░реЗрдВ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/vuejs/vue/issues/3977#issuecomment-355524605 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/AACouvWQNer0XUjuzBDHgePpZQ-D2DAWks5tHfx2gaJpZM4KaIfu
.

@Akryum рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ sfc рдЯреЗрдореНрдкрд▓реЗрдЯ рдереЛрдбрд╝рд╛ рдФрд░ рдкреНрдпрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдХрдИ рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реВрдВ рдЬреЛ рдХрд┐ рдЧреЗрдЯ-рдЧреЛ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛ рд╕рдХрддреЗ рдереЗ рдФрд░ рдореИрдВ рдЕрдиреБрднрд╡ рд╕реЗ рдереЛрдбрд╝рд╛ рдирд┐рд░рд╛рд╢ рд╣реВрдВред рдПрд╕рдПрдлрд╕реА рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ props рдФрд░ listeners рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИред рдХреНрдпрд╛ рдЗрди рдЧреБрдгреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд▓рд┐рдП 'рд░реВрдЯ' рдФрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП '$emit' рдореЗрдВ рдореИрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ sfc рдХреЛ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

<template functional>
    <div @click="listeners['request-something'](42)">
        {{props.hello}}
        {{props.world}}
    </div>
</template>

<script>
export default {
    props: ["hello", "world"]
}
</script>

рдмрди рд╕рдХрддрд╛ рд╣реИ

<template functional>
    <div @click="$emit('request-something', 42)">
        {{hello}}
        {{world}}
    </div>
</template>

<script>
export default {
    props: ["hello", "world"]
}
</script>
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

loki0609 picture loki0609  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

paceband picture paceband  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lmnsg picture lmnsg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

guan6 picture guan6  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aviggngyv picture aviggngyv  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ