在 Vue.js 中,关于跨组件状态管理主要有以下几种方式:
- 通过 props 传递:
将共享状态作为 props 传递给子组件,实现父子跨组件 state 共享。
js
// 父组件
data() {
return {
count: 0
}
}
<Child :count="count"></Child>
// 子组件
props: ['count']
- 通过 emit 触发事件:
子组件通过 emit 触发事件,父组件监听事件并操作 state。
js
// 子组件
this.$emit('increment')
// 父组件
<Child @increment="count++" />
data() {
return {
count: 0
}
}
- 通过 ref 获取子实例操作:
父组件通过 ref 获取子实例,直接操作子组件的 data。
js
// 父组件
<Child ref="child" />
// 操作子组件 state
this.$refs.child.count++
// 子组件
data() {
return {
count: 0
}
}
- 通过 Vuex 管理:
使用 Vuex,将 state 定义在 store 中,组件通过 dispatch mutation 的方式操作 state。
js
// store
state: { count: 0 }
// 组件 1
methods: {
increment() {
this.$store.commit('increment')
}
}
// 组件 2
computed: {
count() {
return this.$store.state.count
}
}
- provide/inject 跨级共享:
祖先组件通过 provide 提供数据,后代组件通过 inject 注入数据。
js
// 祖先组件
provide() {
return {
name: 'hello'
}
}
// 后代组件
inject: ['name']
以上是 Vue.js 中常用的跨组件状态管理方式,涵盖了大部分实际场景。