vuex的基础使用

Posted 老张在线敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vuex的基础使用相关的知识,希望对你有一定的参考价值。

一. 五大核心

State

存储应用状态数据的对象 类似 data 值可以是对象 或者是返回对象的函数 使用函数的方式 返回对象 每次返回的都是新的实例对象
引用地址不同 state更新了 视图没更新 因为钩子函数未触发导致 computed解决

Getters

state中派生的状态数据 接收state作为第一个参数 第二个为 可选参数

Mutations

提交mutation来修改store中的状态
同步操作 每个mutation都有一个字符串事件类型 ( type ) 与 一个回调函数 (handler ) 在回调函数中修改状态 不能直接调用mutation的回调函数 需要当mutation类型为increment时才能调用此函数 mutation 必须是同步的 在store中初始化时设置好所有的属性

Actions

与 mutations 类似 提交修改state的行为 处理异步操作
提交的是 mutation 不是直接修改状态 可以包含任意 异步操作

Module

将 store 分割成模块 每个模块都有自己的state mutation action getters

Vuex 四大 辅助函数:mapState mapGetters mapMutations mapActions

​ 【PS】mapState 和 mapGetter 只能在 computed 中使用

​ mapMutations 和 mapActions 只能在 methods 中使用 否则会报错

二. 工作流程

客户端操作事件 dispatch调用action 对应的action处理函数
如接口、逻辑操作 传值 commit一个type类型
mutation接收一个type类型触发对应的函数 修改state’值 state更改后 对应的view视图在render的作用下重新渲染

三. 使用

1. 安装

npm i vuex --save    |    yarn add vuex

2. 新建store文件

// /src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export const store = new Vuex.Store({
    state : {
        count : 6
    },
    getters : {
        doCount : (state,getters)=>{
            return getters.doneTodos.length
        },
        // getters 中 第一个参数 是 state  第二个参数是 getters本身
    }
}) 

3. 引入文件并初始化

// /src/main.js
// 引入 store
import {store} from './store/index.js';
new Vue({
    el:'#app',
    store,
})

4. 创建基本的vuex结构

// store/index.js 创建vuex结构
import Vue from 'vue';
import Vuex from 'vuex';
Vue.ues(Vuex);
export const store = new Vuex.Store({
    state : {
        count : 6
    },
    getters : {
        doCount: (state, getters) => {
            return getters.doneTodos.length
        },
        //getters里的第一个参数是state,第二个是getters本身
        doneTodos:(state) =>{
            return state.count+2
        }
    },
    mutations : {
    	counts(state, v) {
            state.count = v;
        },
        addNum(state,v) {
            if(v){
                state.count += v
            }else{
                state.count ++
            }
        },
        reduceNum(state) {
            state.count --
        }
	},
    actions : {
        actionNumAdd(v) {
            // axios.get("/customer/user_info").then(res => {
            //     v.commit(addNum, res.data);
            // });
            //这里可以直接掉接口,并赋值,第一个参数是mutation里对应的名字,第二个参数是传的值
            v.commit('addNum', 6);
        },
        actionNumReduce(v) {
            // axios.get("/customer/user_info").then(res => {
            //     v.commit(addNum, res.data);
            // });
            //这里可以直接掉接口,并赋值,第一个参数是mutation里对应的名字,第二个参数是传的值

            v.commit('reduceNum', 6);
        }
    }
})

5. 调用vuex

<!-- 下面的实例调用都是用的辅助函数  -->
<template>
  <div id="app">
    <input v-model="counts" />
    <input v-model="getternum" />
    <button @click="addnum1">mutation+1</button>
    <button @click="actionnum6">action+6</button>
    <img src="./assets/logo.png">
    <router-view/>
  </div>
</template>

<script>
import { mapState , mapMutations , mapActions , mapGetters  } from 'vuex';
export default {
  data(){
    return{

    }
  },
  computed:{
    ...mapState({
      counts:(state) => state.count
    }),
    ...mapGetters({
      getternum:'doneTodos'
    })

  },
  methods:{
    ...mapMutations({
      addnum:'addNum'
    }),
    ...mapActions({
      actionnum:'actionNumAdd'
    }),
    addnum1(){
      this.addnum()
    },
    actionnum6(){
      this.actionnum()
    }
  }
}

</script>

原文链接:https://blog.csdn.net/weixin_42949401/article/details/119896938

以上是关于vuex的基础使用的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段13——Vue的状态大管家

Vuex基础:教程与释义

Vuex基础:教程与释义

项目集成 vue-router 和 vuex

[vscode]--HTML代码片段(基础版,reactvuejquery)

vuex基础详解