vue.js父子組件傳參的原理與實現方法 原創
在Vue中,父子組件之間的數據傳遞常常會使用props進行實現。具體原理是,當一個父組件嵌套瞭一個子組件時,在子組件內部使用props接收從父組件傳遞過來的數據,這些數據可以是基礎類型如字符串、數字等,也可以是對象或者數組等復雜類型。
下面展示一個例子,通過一個簡單的計數器組件Counter.vue,演示如何在父組件App.vue中傳值到子組件Counter.vue並更新計數器操作:
子組件:
<!-- Counter.vue --> <template> <div class="counter"> <h4>{{ title }}</h4> <p>當前計數:{{ count }}</p> <button @click="addCount">+1</button> <button @click="reduceCount">-1</button> </div> </template> <script> export default { name: "Counter", props: { title: { type: String, required: true, }, count: { type: Number, required: true, }, }, methods: { // 添加計數 addCount() { this.$emit("add-count"); }, // 減少計數 reduceCount() { this.$emit("reduce-count"); }, }, }; </script>
父組件:
<!-- App.vue --> <template> <div class="container"> <h2>計數器應用</h2> <hr /> <!-- 父組件傳遞計數器標題和當前計數給子組件 --> <Counter :title="title" :count="count" @add-count="handleAddCount" @reduce-count="handleReduceCount" /> </div> </template> <script> import Counter from "./components/Counter.vue"; export default { name: "App", components: { Counter, }, data() { return { title: "計數器", count: 0, }; }, methods: { // 添加計數 handleAddCount() { this.count++; }, // 減少計數 handleReduceCount() { this.count--; }, }, }; </script>
在上述示例中,傳遞數據的方式是通過在父組件中使用v-bind指令將數據綁定到子組件的props屬性上,並在子組件內部訪問props接收數據。同時,在子組件內部定義瞭兩個方法addCount和reduceCount,用於觸發自定義事件,從而向父組件emit事件。
最後需要註意的是,父子組件之間的數據流是單向的,即數據隻能從父組件流向子組件,不能反過來。如果子組件想要修改數據,必須通過emit事件來通知父組件進行相應的操作。
推薦閱讀:
- vue父子組件進行通信方式原來是這樣的
- vue3.0-props、computed、自定義事件方式
- Vue響應式原理及雙向數據綁定示例分析
- VUE組件簡明講解
- Vue3 Composition API的使用簡介