详解Vue This.$Store总结
Vue.js是一款轻量级、高效的JavaScript框架,它本身没有提供全局状态管理机制。但是,vue系列的开发者们为我们写了一个插件——VueX,用来解决这个问题。本文将详细讲解Vue This.$Store总结。
VueX是什么?
VueX是一个用于state管理的应用程序状态管理模式。它使用了集中式存储管理数据,并以可预测方式处理应用程序的状态。通过VueX,我们可以方便地在不同的组件中共享状态,提高开发效率。
如何在Vue中使用VueX?
下面是使用VueX的基本步骤:
- 安装VueX
npm install vuex --save
- 在main.js文件中加入代码:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
- 创建store对象
const store = new Vuex.Store({
state: {...},
mutations: {...},
actions: {...},
getters: {...}
})
- 将store对象注入到Vue实例中
new Vue({
render: h => h(App),
store,
}).$mount('#app')
- 使用store对象的状态属性
假如我们在store中定义了一个状态属性count
,可以使用以下代码在组件中读取该状态属性:
computed: {
...mapState({
count: state => state.count
})
}
VueX的四大核心概念
State
State即应用程序的状态管理机制。我们将需要存储的数据放到一个全局的store中,每个组件可以通过$store.state来访问该对象的数据。
Mutation
Mutation用来管理状态的修改。改变store中数据的唯一方式就是提交mutation。
mutations: {
increment (state) {
state.count++
}
}
Action
Action类似于mutation,但是Action除了修改状态之外,还可以触发其他的mutation。Action可以包含任意异步操作,而mutation则只能是同步的。
actions: {
async fetchData ({commit}, url) {
const data = await api.fetch(url)
commit('setReslut', data)
}
}
Getter
Getter用来对数据进行包装或计算。Getter是只读的,只会返回新的数据,不会修改原数据。
getters: {
doubleCount (state) {
return state.count * 2
}
}
在组件中使用VueX
- 使用mapState辅助函数
mapState函数,将store中的状态映射为组件的计算属性。
computed: {
...mapState({
count: state => state.count
})
}
- 使用mapGetters辅助函数
mapGetters函数,将store中的getter映射为组件中的计算属性。
computed: {
...mapGetters([
'doubleCount'
])
}
示例说明
示例1:使用VueX实现简单计数器
store.js中的代码
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
},
decrement (state) {
state.count--
}
},
actions: {
incrementAsync ({ commit }) {
setTimeout(() => {
commit('increment')
}, 1000)
}
},
getters: {
doubleCount (state) {
return state.count * 2
}
}
})
export default store
App.vue中的代码
<template>
<div id="app">
<h1>{{ count }}</h1>
<button @click="increment">+</button>
<button @click="decrement">-</button>
<button @click="incrementAsync">+ Async</button>
<p>{{ doubleCount }}</p>
</div>
</template>
<script>
import { mapState, mapActions, mapGetters } from 'vuex'
export default {
name: 'App',
computed: {
...mapState({
count: state => state.count
}),
...mapGetters([
'doubleCount'
])
},
methods: {
...mapActions([
'increment',
'decrement',
'incrementAsync'
])
}
}
</script>
示例2:使用VueX管理网站主题
store.js中的代码
const store = new Vuex.Store({
state: {
theme: 'dark'
},
mutations: {
toggleTheme (state) {
if (state.theme === 'dark') {
state.theme = 'light'
} else {
state.theme = 'dark'
}
}
}
})
export default store
App.vue中的代码
<template>
<div :class="theme">
<h1>Hello World</h1>
<button @click="toggleTheme">Toggle Theme</button>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
export default {
computed: {
...mapState({
theme: state => state.theme
})
},
methods: {
...mapMutations([
'toggleTheme'
])
}
}
</script>
<style>
.dark {
background-color: #333;
color: #fff;
}
.light {
background-color: #fff;
color: #333;
}
</style>
以上是Vue This.$Store总结的详细介绍,希望读者们能够掌握VueX的基本使用方法和核心概念,以及如何在组件中使用VueX。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Vue This$Store总结 - Python技术站