Vue组件间数据共享

本文探讨了在Vue中管理共享状态和组件间数据传递的方法。介绍了如何使用Vuex作为状态管理工具,以及通过props进行基本的父-子组件数据传递。强调了Vuex在复杂应用中的优势和prop的单向数据流特性。尽管直接通过props传递值在某些场景下可能不切实际,但可以借助事件监听机制实现子组件向父组件或兄弟组件的通信,但这种方式在多组件交互时可能会变得复杂。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue组件间数据共享


在一些 Vue 前端项目中,一个页面可以看作是由一些子组件拼装成的。但经常一些数据在多个组件中都要用到,并且要保证数据的实时更新。因此需要解决数据在各个组件间共享。常规思路有两个,一个是设置全局变量,另一个是进行变量传递和监听。

使用 Vuex

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。
Vuex概念图
官方文档

组件间数据传递

最基本的是父-子组件数据传递。
在父组件 father.vue 中引用子组件 child.vue,通过设置 :message=“name” 把 name 的值传给 child 组件。这里的 :message相当于 v-bind:message 。

//father
<template>
    <div class="app">
        <child :message="name"></child>
    </div>
</template>
<script>
    import child from './child.vue';
    export default {
        components: {
            child
        },
        data() {
            return {
                name: 'son'
            }
        }
    }
</script>

然后在 child.vue 文件中声明获取到的 message 即可。

//son
<template>
    <span>I am {{ message }}</span>
</template>
<script>
    export default {
        props: ['message']
    }
</script>

prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。修改子组件的 prop 值,是不会传回给父组件去更新视图的。
这里直接传值不太现实,但是可以通过在父组件 $on 监听自定义事件,当子组件里 $emit 触发该自定义事件的时候,父组件执行相应的操作。

//father
<template>
    <div class="app">
        <p>{{ num }}</p>
        <child :message="name" :number="num" @doAdd="addFather"></child>
    </div>
</template>
<script>
    import child from './child.vue';
    export default {
        components: {
            child
        },
        data() {
            return {
                name: 'son',
                num: 0,
            }
        },
        methods: {
            addFather () {
                this.num += 1;
            }
        }
    }
</script>
//son
<template>
    <span>I am {{ message }}</span>
    <button @click="addSon">{{ number }}</button>
</template>
<script>
    export default {
        props: ['message', 'number'],
        methods: {
            addSon () {
                this.number += 1;
                this.$emit('doAdd');//向父组件传递
            }
        }
    }
</script>

因此只要父子组件间设定一个共同的约定可以用这种方法实现(伪)子组件向父组件传值。但是应用场景很少。同理兄弟组件间可以一使用这种方法来传递,就是会变得很麻烦,很麻烦,很麻烦。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值