vuex的基本使用
发布日期:2021-05-07 08:59:22 浏览次数:24 分类:精选文章

本文共 3078 字,大约阅读时间需要 10 分钟。

本来是不打算学这个的,但是用到了,没办法只好学一下。当然只是学习一些基本的用法,想要在大项目中用好还是很难的

可以先看一下官方文档

看完官方文档可以再看一下这篇文章,我个人感觉写的很不错

接下来进入正题(最好先看完上面的)

vuex的五个属性

  • state 状态,相当于vue中的data属性,就是用来放数据的
  • getters 在state的基础上进行延申,相当于vue中的computed。这里说一下getters不会修改state中的数据
  • mutations 和 actions 这两个是来修改state的,相当于vue中的methods
  • modules 模块,所有的东西不可能放在一块,通过模块可以将数据进行分类

实例

创建一个最简单的vue项目,只需要vue和vuex即可,项目目录如下

在这里插入图片描述

1、在src下创建store目录,store目录下创建modules目录和index.js
2、在modules目录下创建moduleA.js

moduleA.js

//statelet state = {       isShow: true,  //是否显示    name: 'Tom'}//getterslet getters = {       //这里说下我见过的三种形式,以name属性为例    //第一种形式    getName1(state) {           return state.name    },    //第二种形式    getName2(state) {           return () => state.name    },    //上面的是箭头函数的形式    // getName2(state) {       //     return function () {       //         return state.name    //     }    // }    //第三种    getName3(state, param) {           return param => {               return param + state.name        }    }}//mutations,以isShow属性为例let mutations = {       changeShow(state) {           state.isShow = !state.isShow    },    changeName(state, data) {           state.name = data    }}//ctionslet actions = {       //这里有两种写法,本质上一样    //写法1,无参    asChangeShow(context) {           context.commit('changeShow')    },    //写法2,无参    // asChangeShow({ commit }) {       //     commit('changeShow')    // }    //有参    asChangeName({    commit }, data) {           commit('changeName', data)    }}//导出模块export default {       namespaced: true,//是否开启模块    //键和值相同时可以简写    state,    getters,    mutations,    actions}

注:

1、getters的第一种和第二种用法都是将值给返回,至于为啥有第二种写法我也不太清楚。这里说一下第三种写法,当你要给getters传参时,返回值必须是一个函数
2、mutations和actions,上面也说了这两个相当于methods,但为啥有两个?因为mutations是同步的,当你碰到异步操作时就需要使用actions,但是actions不能直接操作state,要借助mutations来操作state

index.js

import Vue from 'vue'import Vuex from 'vuex'import moduleA from './modules/moduleA'Vue.use(Vuex)export default new Vuex.Store({       store: {   },    getters: {   },    mutations: {   },    actions: {   },    modules: {           moduleA    }})

main.js

import Vue from 'vue'import App from './App.vue'import store from '@/store/index'Vue.config.productionTip = falsenew Vue({     store,  render: h => h(App),}).$mount('#app')

这里将store挂载到根实例中,这样做使得子实例直接通过this.$store调用,而不用单独导入。如果单独导入的话,使用store调用,与导入其它对象相同

App.vue

注:

1、getters是个数组,用数组的形式调用
2、调用mutations中的方法必须使用commit方法,无论是直接调用还是在actions中调用。mutations是同步的
3、调用actions中的方法必须使用dispatch,actions不能直接修改state,通过commit调用mutations来修改。actions是异步的
4、一般情况下使用mutations来修改state,异步情况才使用actions

上一篇:Spring知识小汇(2)—— IOC理论推导(IOC本质、HelloSpring、IOC创建对象的方式)
下一篇:Spring知识小汇(1)—— 简介 、优点、组成、扩展

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月02日 12时30分22秒