五分钟学会vuex

五分钟学会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
1
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>
————————————————
版权声明:本文为CSDN博主「Kylin橙橙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42949401/article/details/119896938

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值