2.3.3
ν μ€νΈνλ €λ λμμ μ΅μνμ μ¬νμ λ§λ€μμ΅λλ€. μμ λ JSXκ° μλνκΈ° λ§νλ©΄λ©λλ€.
μμμμ μ λ¬ λ μμ±μ ctx.injections
νμλμ΄μΌν©λλ€.
Ctx.injections
μ΄ (κ°) μ‘΄μ¬νμ§λ§ λΉμ΄ μμ΅λλ€. νΉμ±μ΄ κΈ°λ₯ κ΅¬μ± μμ 컨ν
μ€νΈλ‘ μ λ¬λμ§ μμ΅λλ€.
μ΄λ parent
λμ child
μ΄ vm
μμμΌλ‘ κ°μ£ΌλκΈ° λλ¬Έμ
λλ€ (λ¬Έμ μΌ μ μμ). λ°λΌμ provide
μ vm
provide
λ₯Ό μ¨μΌ ν μλ μμ΅λλ€.
BTW, λ°μ΄μ¬λ¦°μ΄ [email protected]μ μ¬μ©
provide injectionμ λν μ‘°ν μκ³ λ¦¬μ¦μ μμμ΄ μ 곡λ μμ±μ νμΈν λ€μ μ 곡λ propsκ° λ£¨νΈμμμ λκΉμ§ $parent
κ³μΈ΅ ꡬ쑰λ₯Ό λ°λ³΅νλ κ²μ
λλ€.
https://github.com/vuejs/vue/blob/b182ac40697edbe8253d4bd68b6ac09e93259e1c/src/core/instance/inject.js#L59 -L59
λ°μ΄μ¬λ¦°μ μ€νν μ μμμ§λ§ https://jsfiddle.net/Austio/vhgztp59/7/ μ΄ λ°μ΄μ¬λ¦°μ μ€ννμ λ μ‘°ν 컨ν μ€νΈμ λλ¬νμ λ μμ κ΅¬μ± μμμμ $ parentκ° μ μλμ§ μμμ΅λλ€. μ μ΄λ μ΄κ²μ΄ μ¬λ‘―μΌλ‘ λ λλ§νλ λ¬Έμ κ° μλκ³ κ΅¬μ± μμ κ°μ κ΄κ³κ° μλ€λ©΄ μμμ λλ€.
μ¬λ‘―μ΄ ν΄κ²°λκΈ° μ μ κΈ°λ₯ κ΅¬μ± μμκ° λ λλ§ λ κ²μ²λΌ 보μ λλ€.
@Kingwlμ΄ λ§κ³ κ·Έκ²μ μΌμ’ μ κΈ°μ μ μꡬ μ¬νμ λλ€.
λ΄κ° κ·Έκ²μ μ΄μ€νκΈ° λλ¬Έμ μμ μ μ κΈ° ν κ²μ κΈ°μ΅ν©λλ€. κ²°κ΅μλ κΈ°λ₯μ κ΅¬μ± μμκ° λ λλ§λλ κ΅¬μ± μμμ μ°κ²°λμ΄ μ¬λ‘―μμ μ¬μ©λλ©΄ μΈλΆ κ΅¬μ± μμμ μ°κ²°λκΈ° λλ¬Έμ μ μμ μΌλ‘ 보μμ΅λλ€. κ·Έλ¬λ μλνμ§ μλ κ΅¬μ± μμμλ ν΄λΉλμ§ μμ΅λλ€.
컨ν
μ΄λλ₯Ό λΆμ¬ mode: 'foo'
λ° λ λλ§ <div><slot/></div>
<!-- rendered in App -->
<container>
<!-- parent is App, mode is undefined -->
<functional></functional>
</container>
<container>
<!-- parent is container, mode is foo -->
<not-functional></not-functional>
</container>
νΈμ§ : @alidcastano Vue 2λ₯Ό μ¬μ©νμ§ μμκΈ° λλ¬Έμ κ·νμ μ견μμ λ°μ΄μ¬λ¦°μ μ λ°μ΄νΈνμ΅λλ€.
Haha λ°μ΄μ¬λ¦°μμ μλͺ»λ Vue λ²μ μ μ¬μ©νμ¬ λ―Έμν©λλ€. λ΄κ° κΉ¨λ«μ§ λͺ»ν JSXλ₯Ό κ΅¬μ± ν μ μλ€λ κ²μ λ무 μ¬λ‘ μ‘νμ΅λλ€. @posva μμ λ₯Ό μμ
-
λ°λΌμ μ¬κΈ°μ λ¬Έμ λ κΈ°λ₯ κ΅¬μ± μμκ° μ 곡λ μμ±μλ°μ μ μλ€λ κ²μ΄ μλλΌ κΈ°λ₯ κ΅¬μ± μμκ° μ¬λ‘―λ³΄λ€ λ¨Όμ λ λλ§λλ€λ κ²μ λκΉ?
@LinusBorg "κΈ°μ μ μꡬ μ¬ν"μ΄λ ν΄κ²° λ°©λ²μ΄ μκ±°λ μλ λ λμμμ μλ―Έν©λκΉ?
μνμ μ λ¬νλ vm
μν μνλ 컨ν
μ΄λλ₯Ό λ§λ€μ΄μΌν©λκΉ? μλ₯Ό λ€μ΄ λμμΈμ λ€μκ³Ό κ°μ΄ λ³κ²½λ©λλ€.
// before
<parent-component>
<child-component />
</parent-component>
// after
<vm-container>
<parent-component>
<child-component />
</parent-component>
<vm-container>
κ·Έλ¬λ μμ μλ λΆλͺ¨ κ΅¬μ± μμμ λ³Έμ§μ΄ μ΄λ―Έ μμμκ² μ 곡νλ λ° νμν λͺ¨λ λ°μ΄ν°λ₯Ό μλ°νκΈ° λλ¬Έμ λΆνμνκ² λΆνλ € 보μ λλ€. κ·Έλ¬λ λλ ν λ‘ μ μ¬μ§κ° μμ΅λλ€. μ΄κ²μ΄ λν¬λ€μ΄ μ μνλ κ²μ λκΉ?
vm-container
μ μ¬λ‘―μ΄ app
컨ν
μ€νΈμμ λ λλ§λκΈ° λλ¬Έμ μ무κ²λ λ³κ²½νμ§ μμ΅λλ€.
"κΈ°μ μ μꡬ μ¬ν"μ΄λ ν΄κ²° λ°©λ²μ΄ μκ±°λ μλ λ λμμμ μλ―Έν©λκΉ?
μ΄ λμμ κΈ°λ₯ κ΅¬μ± μμκ° μλνλ λ°©μμ κ²°κ³Όμ λλ€. λ€μ κ΅¬μ± μμ μΈνΈλ₯Ό κ³ λ €νμμμ€.
<!-- template of a `parent` component -->
<template>
<Child>
<functional />
</Child>
</template>
κΈ°λ₯μ κ΅¬μ± μμλ₯Ό λ€λ₯Έ κ΅¬μ± μμμ μ¬λ‘―μ μ λ¬ν λ νμ κ΅¬μ± μμκ° κ²°κ³Ό vNodeλ₯Ό μ¬λ‘― μ½ν μΈ λ‘λ°μ μ μλλ‘ νμ κ΅¬μ± μμλ‘ μ λ¬λκΈ° μ μ λ λλ§ν΄μΌν©λλ€. (*)
μμ μμμ μ΄λ <functional>
κ΅¬μ± μμκ° λ λλ§λλ μκ°μ μ¬μ© κ°λ₯ν λΆλͺ¨κ° <child>
κ° μλλΌ μΈλΆ κ΅¬μ± μμ ( <parent>
)μμ μλ―Έν©λλ€.
κ²°κ³Όμ μΌλ‘ κΈ°λ₯μ κ΅¬μ± μμμ μ¬μ©ν μμλ μ μΌν μ£Όμ
μ <parent>
μμλ μ¬μ©ν μμλ μ£Όμ
μ
λλ€.
(*) : μ΄κ²μ΄ λ°λ‘ Virtualdomμ νμ¬ κ΅¬νμ΄ κΈ°λ₯μ κ΅¬μ± μμμ ν¨κ» μλνλ λ°©μμ λλ€. μ΄λ₯Ό λ³κ²½νλ €λ©΄ λ΄λΆ λ©μ»€λμ¦μ μλΉν λ§μ΄ λ³κ²½ν΄μΌν©λλ€.
@posva @LinusBorg μκ² μ΅λλ€. μ€λͺ ν΄ μ£Όμ μ κ°μ¬ν©λλ€.
λ°λΌμ μ΄λ¬ν μꡬ μ¬νμΌλ‘ μΈν΄ κΈ°λ₯ κ΅¬μ± μμμ ν¨κ» μ 곡 / μ£Όμ
μ μ¬μ©νλ μ μΌν λ°©λ²μ app
컨ν
μ€νΈμμ μ 곡λλ propsλ₯Ό κ°λ κ²μ
λλ€.
μ΄ μ μ½μ λ¬Έμμμ λͺ νν΄μ§ κ²μ΄λΌκ³ νμ ν©λλ€. μννκ±°λ λͺ ννν΄μΌ ν λ€λ₯Έ μ¬νμ΄ μμΌλ©΄ κ³μ μ§ννμ¬μ΄ λ¬Έμ λ₯Ό μ’ λ£νμμμ€. λ€μ νλ² κ°μ¬λ립λλ€!
μ¬λ‘―μ κΈ°λ₯μ κ΅¬μ± μμλ₯Ό κ°μ νλ λ°©λ²μ μ°Ύμ μμμ κ²μ
λλ€.
κ·Έλ¬λ μ§κΈμ @posva λ° @LinusBorgκ° λ§ν κ²μ²λΌν΄μΌν©λλ€.
@Kingwl μ΄μ΄ μ£Όμ μ κ°μ¬ν©λλ€.
λλ λ§μΉ¨λ΄ μμ μ‘°μΈμ μ¬μ©νμ¬ μ΄κ²μ vue-mobiledoc-editor νλ¬κ·ΈμΈμ ν΅ν©νλ €κ³ μλνμ΅λλ€. app
μΈμ€ν΄μ€μμ κ΅¬μ± μμλ₯Ό μ¬μ©ν΄μΌνλ κ²½μ° λ΄κ° μμνλ ν κ°μ§ λ¬Έμ λ μ¬μ© λ μ€μ²© κ΅¬μ± μμμ μ μ°μ±μ νμ©νκΈ°κ° λ μ΄λ ΅λ€λ κ²μ
λλ€.
μλ₯Ό λ€μ΄ μ± μΈμ€ν΄μ€μ μ΄λ―Έ λ±λ‘ λ κ΅¬μ± μμλ₯Ό λ΄ λ³΄λ΄μΌν©λλ€.
...
export default Vue.extend({
render (h) {
return (
<div>
<ParentComp>
<ChildFuncComp/>
</ParentComp>
</div>
)
},
provide () { // data that needs to be injected into functional components
return {
msg: 'hello'
}
},
components: {
ParentComp,
ChildFuncComp
}
})
κ·Έλ° λ€μ λ΄ μ΄ν΄μμ μ¬μ©μκ° νλ¬κ·ΈμΈμ μ¬μ©ν λ λ€μκ³Ό κ°μ΅λλ€.
// template
<div id="app">
<div id="#someWhereInApp" />
</div>
// script
import SuperCoolComponent from 'SuperCoolComponent'
export default {
mounted () {
this.$once('mounted', () => new SuperCoolComponent().$mount('#someWhereInApp'))
this.$emit('mounted')
}
}
λ΄ κ΅¬νμ΄ μ ννλ©΄ μ¬μ©νλ €λ κ΅¬μ± μμλ₯Ό κ°λ³μ μΌλ‘ κ°μ Έμ€κ³ λ±λ‘ ν μ μκΈ° λλ¬Έμ κΈ°λ₯ κ΅¬μ± μμμ ν¨κ» μ 곡 / μ£Όμ μ μ¬μ©μ΄ μ¬κ°νκ² μ νλ©λλ€.
λμ μ 체 κ΅¬μ± μμλ₯Ό μ¬μ©νμ¬ μ 곡 / μ£Όμ μ μ§μν©λλ€.
λλ μ΄κ²μ ν΄κ²°νλ €κ³ λ
Έλ ₯νκ³ μλ€
κΈ΄ κ³Όμ μΌ μλ μμ΅λλ€ π
@Kingwl ν΄κ²°ν μ μμμ΅λκΉ?
v3μμμ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ³νμ΄ μμ΅λκΉ?
μλ₯Ό λ€μ΄ v-forλ₯Ό λ λλ§ ν¨μλ‘ μΆμννλ €κ³ νμ§λ§ λ΄ μμμ κΈ°λ₯μ κ΅¬μ± μμ μΌ μ μμ΅λλ€ (λ°λΌμ λ λλ§ ν¨μμ λ€μ΄κ° λ μ΄λ―Έ λ λλ§λμ΄ λ³΅μ ν μ μμ΅λλ€).
λͺ¨λ μ λ°μ΄νΈ?
κ°μ₯ μ μ©ν λκΈ
v3μμμ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ³νμ΄ μμ΅λκΉ?
μλ₯Ό λ€μ΄ v-forλ₯Ό λ λλ§ ν¨μλ‘ μΆμννλ €κ³ νμ§λ§ λ΄ μμμ κΈ°λ₯μ κ΅¬μ± μμ μΌ μ μμ΅λλ€ (λ°λΌμ λ λλ§ ν¨μμ λ€μ΄κ° λ μ΄λ―Έ λ λλ§λμ΄ λ³΅μ ν μ μμ΅λλ€).