提示:以下是本篇文章正文内容,下面案例可供参考
Vuex是一个专为vue.js应用程序开发的状态管理模式。
当我们构建一个中大型的单页面应用程序时,Vuex可以更好的帮助我们在组件外部统一管理状态。
它通常用来存放一些公共的数据,他没有组件传参的局限性,每个组件都可以在Vuex里存取数据。
npm:
npm install vuex --save
yarn:
yarn add vuex
代码如下(示例):
import Vue from 'vue' // 引入vue
import Vuex from 'vuex' // 引入vuex
Vue.use(Vuex) // 安装一下Vuex
export default new Vuex.Store({
// 把创建好的实例对象暴露出去
state: {
},
mutations: {
},
actions: {
},
getters:{
},
modules: {
}
})
代码如下(示例):
import Vue from 'vue'
import App from './App.vue'
import store from './store' // 引入刚刚写好的store文件夹下的index.js文件
Vue.config.productionTip = false
new Vue({
store, // 在Vue实例中注册一下
render: function (h) {
return h(App) }
}).$mount('#app')
const store= new Vuex.Store({
state: {
name:"张三"
},
mutations: {
},
actions:{
},
getters: {
},
modules:{
}
})
如何调用state里面的数据
<template>
<div>
在页面直接输出
{
{$store.state.name}}
<br/>
<botton @click="aa">获取<button>
{
{name}}
div>
template>
<script>
export default {
data(){
name:""
},
methods:{
aa(){
this.name = this.$store.state.name
}
}
}
script>
!!!该方法不能执行异步操作
const store= new Vuex.Store({
state: {
name:"张三"
},
mutations: {
xiu(state,can){
// 第一个参数默认传输的是state 从第二个参数开始才是你传输的参
state.name = can
}
},
actions:{
},
getters: {
},
modules:{
}
})
如何调用mutations里面的方法
<template>
<div>
<botton @click="aa">获取<button>
{
{$store.state.name}}
div>
template>
<script>
export default {
methods:{
aa(){
// 使用 commit 方法来调用 vuex 里的 mutations 方法
this.$store.commit("xiu","李四")
// commit 方法里第一个参数是你要调用 mutations 的方法中的方法名(需要用引号包起来)
// 第二个参数是你要传输的参数
}
}
}
script>
const store= new Vuex.Store({
state: {
num:0
},
mutations: {
xiu(state,can){
// 第一个参数默认传输的是state 从第二个参数开始才是你传输的参
stata.num += can
}
},
actions:{
yibu(store,can){
// 第一个参数默认传输的是 store 实例 从第二个参数开始才是你传输的参
setTimeout(()=>{
store.commit("xiu",can)
},2000)
}
},
getters: {
},
modules:{
}
})
如何调用actions里面的方法
<template>
<div>
<botton @click="aa">获取<button>
{
{$store.state.num}}
div>
template>
<script>
export default {
methods:{
aa(){
// 使用 dispatch 方法来调用 vuex 里的 actions 方法
this.$store.dispatch("yibu",1)
// dispatch 方法里第一个参数是你要调用 actions 的方法中的方法名(需要用引号包起来)
// 第二个参数是你要传输的参数
}
}
}
script>
他会在它里面定义的方法中所依赖的属性发生改变时自动触发 需要 return 返回一个值
const store= new Vuex.Store({
state: {
num:0
},
mutations: {
xiu(state,can){
// 第一个参数默认传输的是state 从第二个参数开始才是你传输的参
stata.num += can
}
},
actions:{
},
getters: {
haha(a, b, c, d) {
console.log(a) // 全局 state
console.log(b) // gettes 下的全部方法
console.log(c) // 全局 state
console.log(d) // gettes 下的全部方法
}
},
modules:{
}
})
如何调用getters里面的方法
<template>
<div>
<botton @click="aa">获取<button>
{
{$store.getters.jisuan}}
div>
template>
当需要在 Vuex 里做大量代码操作时整个文件会变得特别乱,代码会变的不是很好梳理,而 Vuex 中的 modules 属性解决了这个问题Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割。
对于初学 Vuex 的人来说只需要先了解以上四种属性就可以,等完全熟练掌握后 可以进入下面这个链接去学习 modules 的使用方法
modules 的使用方法
以上就是今天要讲的内容,本文仅仅简单介绍了Vuex的使用,而学会了 Vuex 的使用就可以让我们把数据在各个组件中互相传递。