vuex入门

简介: vuex入门

一、vuex简介

1.1 概述

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它可以帮助我们在应用程序中管理和共享状态,使得不同组件之间的数据共享更加简单和可预测。

在Vue.js应用程序中,组件之间的通信是通过props和事件来实现的。然而,当应用程序变得复杂时,组件之间的数据传递和状态管理可能会变得困难和混乱。这时候,Vuex就派上了用场。

通过使用Vuex,我们可以将应用程序的状态集中管理,使得状态的变更和获取变得更加简单和可控。Vuex还提供了一些高级特性,如模块化组织、插件系统和严格模式,以满足不同应用程序的需求。

1.2 核心

State(状态):State是应用程序的状态存储,它是一个响应式的数据源。在Vuex中,我们可以定义和管理应用程序的状态,这些状态可以被多个组件共享和访问。

Mutations(变更):Mutations是用于修改状态的方法。它们是同步的操作,用于改变State中的数据。在Vuex中,我们可以定义多个Mutations,每个Mutation都有一个字符串类型的事件名和一个回调函数,用于修改State中的数据。

Actions(动作):Actions是用于触发异步操作的方法。它们可以包含任意异步操作,如网络请求、定时器等。Actions通过调用Mutations来修改State中的数据。在Vuex中,我们可以定义多个Actions,每个Action都有一个字符串类型的事件名和一个回调函数,用于执行异步操作。

Getters(获取器):Getters是用于从状态中获取数据的方法。它们可以对State中的数据进行计算和过滤,并返回一个新的值。在Vuex中,我们可以定义多个Getters,每个Getters都有一个字符串类型的事件名和一个回调函数,用于获取计算后的数据。

二、使用

2.1 安装

1、node.js10 输入以下指令进行安装

npm install vuex -S

2、node.js18 输入以下指令进行安装

npm i -S vuex@3.6.2

2.2 创建store模块

2.3 在src/store/index.js中写入内容

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import actions from './actions'
import mutations from './mutations'
Vue.use(Vuex)
const store = new Vuex.Store({
  state,
  getters,
  actions,
  mutations
})
export default store

2.4.在src/main.js中导入并使用store实例

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from '@/api/http'
import VueAxios from 'vue-axios'
import router from './router'
import store from './store'
//开发环境下才会引入mockjs
process.env.MOCK && require('@/mock')
Vue.use(ElementUI);
Vue.use(VueAxios,axios)
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
  el: '#app',
  data(){
    return{
      Bus: new Vue({})
    }
  },
  router,
  store,
  components: { App },
  template: '<App/>'
})

2.5.在views新建vuex目录,添加Page1.vue和Page2.vue文件

<template>
  <div>
    <h1>这是页面1</h1>
  </div>
</template>
<script>
export default {
  name: "Page1"
}
</script>
<style scoped>
</style>
<template>
  <div>
    <h1>这是页面2</h1>
  </div>
</template>
<script>
export default {
  name: "Page1"
}
</script>
<style scoped>
</style>

2.6.配置路由

import Page1 from '@/views/vuex/Page1'
import Page2 from '@/views/vuex/Page2'
#添加到与TopNav同级的地方
{
    path: '/vuex/Page1',
  name: 'Page1',
  component: Page1
},{
    path: '/vuex/Page2',
  name: 'Page2',
  component: Page2
}

2.7.在LeftNav.vue添加内容

<el-menu-item
      index="/vuex/Page1"
      key="'key_999">
      <span>Vuex页面1</span>
    </el-menu-item>
    <el-menu-item
      index="/vuex/Page2"
      key="'key_1000">
      <span>Vuex页面2</span>
    </el-menu-item>

三、存取值

3.1 state直接取值

修改src/store/state.js

export default {
  name: 'Vuex学习'
}

修改src/views/vuex/Page1.vue的内容

<template>
  <div>
    <h1>这是页面1========{{msg}}</h1>
    <p>state直接取值</p>
    <button @click="func1">state直接取值</button>
  </div>
</template>
<script>
export default {
  name: "Page1",
  data(){
    return{
      msg: null
    }
  },
  methods:{
    func1(){
      this.msg = this.$store.state.name;
    }
  }
}
</script>
<style scoped>
</style>

3.2 getters取值

修改src/store/getters.js

export default {
  getName(state){
    return state.name;
  }
}

修改Page1.vue的内容

#div中添加
<p>getters取值</p>
<button @click="func2">getters取值</button>
#methods中添加
func2(){
  this.msg = this.$store.getters.getName;
}

3.3 mutations存值

修改mutations.js的内容

export default {
  setName(state, payload) {
    state.name = payload.name;
  }
}

修改Page1.vue

#div中添加
<p>mutations存值</p>
<button @click="func3">mutations存值</button>
#methdos中添加
func3(){
  this.$store.commit('setName',{
    name: '这是修改后的Vuex学习'
  });
}

修改Page2.vue

- <template>
  <div>
    <h1>这是页面2===={{msg}}</h1>
  </div>
</template>
<script>
export default {
  name: "Page2",
  data(){
    return{
      msg: null
    }
  },created() {
    this.msg = this.$store.state.name;
  }
}
</script>
<style scoped>
</style>

点击page1按钮page2改变

3.4 actions存值

修改Page1.vue的内容,删除data中的msg,改为computed属性

computed:{
    msg(){
        return this.$store.state.name;
    }
}

修改store/actions.js

export default {
  setNameAsync(context, payload) {
    //context指的是vuex的实例
    //等价于this.$store
    setTimeout(function () {
      context.commit('setName',payload);
    },6000)
  }
}

修改Page1.vue

#div中添加
<p>actions存值</p>
<button @click="func4">actions存值</button>
#methods中添加
func4(){
  this.$store.dispatch('setNameAsync',{
    name: '这是修改后的Vuex学习--action'
  });
}

3.5 发送ajax请求获取后台数据

api/action.js添加

'VUEX_INFO': '/vuex/queryVuex',//vuex异步获取数据

修改Page1.vue

- #div中添加
<p>后台ajax改变值</p>
<button @click="func5">后台ajax改变值</button>
#methods中添加
func5(){
      this.$store.dispatch('setNameAjax',{
        _this: this
      });
    }

修改actions.js

export default {
  setNameAsync(context, payload) {
    //context指的是vuex的实例
    //等价于this.$store
    setTimeout(function () {
      context.commit('setName', payload);
    }, 3000)
  },
  setNameAjax(context, payload) {
    let _this = payload._this;
    let url = _this.axios.urls.VUEX_INFO;
    let params = {
      resturantName: '这是ajax的修改'
    }
    _this.axios.get(url, {params}).then(resp=>{
      if(resp.data.success){
        context.commit('setName',{
          name: resp.data.msg
        })
      }
    }).catch(err=>{
    })
  }
}

目录
相关文章
|
1月前
|
JavaScript 前端开发 数据管理
vue2知识点:理解vuex、安装vuex、搭建vuex环境
vue2知识点:理解vuex、安装vuex、搭建vuex环境
30 0
|
3月前
|
存储 资源调度 JavaScript
学习使用Vuex
【8月更文挑战第5天】学习使用Vuex
49 5
|
4月前
|
存储 缓存 JavaScript
VUEX 的使用学习一
VUEX 的使用学习一
41 0
|
JavaScript
Vue Vuex 学习
Vue Vuex 学习
58 0
|
存储 JavaScript 前端开发
Vuex的学习
Vuex的学习
100 0
|
存储 JavaScript 安全
简介vuex和pinia
简介vuex和pinia
|
存储 缓存 JavaScript
vuex学习笔记
vuex学习笔记
86 0
|
存储 缓存 JavaScript
Vue学习笔记(十一) Vuex
Vue学习笔记(十一) Vuex
85 0
|
调度
Vuex从了解到实际运用,彻底搞懂什么是Vuex(一)
Vuex全局状态管理是任意组件之间的通信的解决方案,本文讲vuex基础,帮助初学者更好的入门
105 0
Vuex从了解到实际运用,彻底搞懂什么是Vuex(一)
|
JavaScript
Vuex(一)之基本使用
Vuex(一)之基本使用
Vuex(一)之基本使用