IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue-vuex -> 正文阅读

[JavaScript知识库]vue-vuex

1. vuex: state、getters、mutations、actions

、在src目录下面新建一个文件store,在里面新建index.js文件,代码如下:


import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  // state 用于存储数据 
  state: {
    money: 100,
  },
  // getters 用于获取state里面的数据,同时也可以进行一些简单的计算属性
  getters:{
    getMoney: state => {
      return state.money
      // return state.money + 1  //计算属性
    },
  },
  // mutations 用于修改state里面的数据,修改的方法写在mutations里面(同步操作)
  mutations: {
    addMoney: state => {
      return state.money = state.money + 1
    },
    removeMoney: state => {
      return state.money = state.money - 1
    },
  },
  // actions 也是用于修改state里面的数据,只不过是从actions > mutations > state的顺序进行修改里面的state的数据(异步操作--推荐)
  actions: {
    changeAddMoney: (add) => {
      add.commit("addMoney")
    },
    changeRemoveMoney: (remove) => {
      remove.commit("removeMoney")
    },
  },
  modules: {},
});

在需要引用vuex里面的数据的文件里面写,代码如下所示:

<template>
  <div class="vuex">
    <h3>vuex</h3>
    <div>
      <h4>money</h4>
      <div>直接从state里面获取值,不推荐:{{ this.$store.state.money }}</div>
      <div>通过getters进行获取值,推荐:{{ this.$store.getters.getMoney }}</div>
      <div>
        <p>通过mutations直接进行修改state里面的值,不推荐(同步触发state值)</p>
        <button @click="addMutations">Add</button>
        <button @click="removeMutations">Remove</button>
      </div>
      <div>
        <p>通过actions间接进行修改state里面的值,推荐(异步触发state值)</p>
        <button @click="addActions">Add</button>
        <button @click="removeActions">Remove</button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "Vuex",
  methods: {
    // 此处不要使用箭头函数,因为箭头函数会有this指向问题,会出现$store未定义。
    addMutations() {
      // 不推荐--同步
      this.$store.commit("addMoney");
    },
    removeMutations() {
      // 不推荐--同步
      this.$store.commit("removeMoney");
    },
    addActions() {
      // 推荐--异步
      this.$store.dispatch("changeAddMoney");
    },
    removeActions() {
      // 推荐--异步
      this.$store.dispatch("changeRemoveMoney");
    },
  },
};
</script>

2. vuex-modules

store / index.js

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

const moduleA = {
  state: {
    age2: 24
  },
  getters:{
    getAge2: state => {
      return state.age2
    }
  },
  mutations: {
    addAge2: state => {
      return state.age2 = state.age2 + 1
    },
    removeAge2: state => {
      return state.age2= state.age2 - 1
    },
  },
  actions: {
    changeAddAge2: (add) => {
      add.commit("addAge2")
    },
    changeRemoveAge2: (remove) => {
      remove.commit("removeAge2")
    },
  },
};

export default new Vuex.Store({
  state: {},
  getters:{},
  mutations: {},
  actions: {},
  modules: {
    moduleA: moduleA
  },
});

src / views / Vuex.vue

<template>
  <div class="vuex">
    <h3>vuex</h3>
    <div>
      <h4>modules</h4>
      <div>
        在modules中,直接从state里面获取值,不推荐:{{
          this.$store.state.moduleA.age2
        }}
      </div>
      <div>
        在modules中,通过getters进行获取值,推荐:{{
          this.$store.getters[("moduleA", "getAge2")]
        }}
      </div>
      <div>
        <p>
          在modules中,通过mutations直接进行修改state里面的值,不推荐(同步触发state值)
        </p>
        <button @click="addMutationsAgeModule">Add</button>
        <button @click="removeMutationsAgeModule">Remove</button>
      </div>
      <div>
        <p>
          在modules中,通过actions间接进行修改state里面的值,推荐(异步触发state值)
        </p>
        <button @click="addActionsAgeModule">Add</button>
        <button @click="removeActionsAgeModule">Remove</button>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "Vuex",
  components: {},
  methods: {
    // 此处不要使用箭头函数,因为箭头函数会有this指向问题,会出现$store未定义。
    addMutationsAgeModule() {
      this.$store.commit("addAge2");
    },
    removeMutationsAgeModule() {
      this.$store.commit("removeAge2");
    },
    addActionsAgeModule() {
      this.$store.dispatch("changeAddAge2");
    },
    removeActionsAgeModule() {
      this.$store.dispatch("changeRemoveAge2");
    },
  },
};
</script>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:43:22  更:2021-08-02 10:44:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 17:56:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码