浅谈vuex 五大属性 传值 获取值的方法

2023-11-16

Vuex 是什么?

        Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

在说属性之前要准备好一些文件 以及环境 (以vue2为例)

        下载安装   

npm i vuex --S

         新建文件夹store 与main.js同级  文件夹下新建index.js 

         index.js写入以下代码

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

Vue.use(Vuex);

export default new Vuex.Store({
  // strict: true,// 严格模式
  state: {
    oneComNumber: 10,
  },

  // Action支持异步调用Mutation来修改。  处理一些逻辑业务
  actions: {
    numberAddWait(context, v) {   // 上下文和传过来的值
      setTimeout(() => {
        // context.commit("numberAdd", v)
        context.state.oneComNumber += v // 这样也可以改变state里面的值
      }, 1000);
    },
  },

  // 用于操作一些数据 (state)  也可进行判断
  mutations: {
    numberAdd(state, v) {
      // if (state.oneComNumber % 2) {
      //     console.log(4546546546);
      // }
      state.oneComNumber += v
    },
    numberMinus(state, v) {   // 上下文和传过来的值
      state.oneComNumber -= v
    },


  },
  // 计算属性 辅助函数
  getters: {
    bigOneComNumber(state) {
      return state.oneComNumber * 10
    }
  },
});

State 单一状态树(用一个对象就包含了全部的应用层级状态)

        单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。

export default new Vuex.Store({ 
    // state 定义数据  在组件都能读取得到
    state: {
        oneComNumber: 10,
    },
})

以下是常用读取数据的方式

        store 实例中读取状态最简单的方法就是在计算属性中返回某个状态( ):

  computed: {
    oneComNumber() {
      return this.$store.state.oneComNumber;
    },
  },

        然后直接使用即可 

  <h1>computed里面的值:{{ oneComNumber }}</h1>

       当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性(展示方法一样)

import { mapState } from "vuex";  // 需要引入
export default {
  name: "HelloWorld",
  props: {
    
  },
  data() {
    return {};
  },
  created() {
    console.log(this.$store);
  },
  computed: {
    // oneComNumber() {
    //   return this.$store.state.oneComNumber;
    // },

    // 这里是数组形式获取 用于方法名和属性名一样的时候
    ...mapState(["oneComNumber"]), // 展开运算符写入即可

    // 这里是对象形式获取 用于方法名和属性名一样的时候
    // ...mapState({'oneComNumber':'oneComNumber'}), // 展开运算符写入即可
  },
};

Action

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作。

        Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters 。

  // Action支持异步调用Mutation来修改。  处理一些逻辑业务
  actions: {
    // 这里 就是等一段时间去执行 
    numberAddWait(context, v) {   // 上下文和传过来的值
      setTimeout(() => {
          context.commit("numberAdd", v)
      }, 1000); 
    },
  },

        在页面调用时可以直接调用:$store.dispatch('方法名称', 传递的参数)

<button @click="$store.dispatch('numberAddWait', n)">过一会再加</button>

        使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用

import { mapActions } from "vuex";

export default {

  methods: {
    ...mapActions(["numberAddWait"]),
  },
 
};

        在相应区域调用相应方法即可

<button @click="numberAddWait(n)">过一会再加</button>

Mutation

        更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。

  // 用于操作一些数据 (state)  也可进行判断
  mutations: {
    numberAdd(state, v) {
      state.oneComNumber += v
    },
    numberMinus(state, v) {   // 上下文和传过来的值
      state.oneComNumber -= v
    },
  },

        直接调用 通过commit('方法名',参数)调用

 <button @click="$store.commit('numberAdd', n)">+</button>
 <button @click="$store.commit('numberMinus', n)">-</button>

        使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用

 <button @click="numberAdd(n)">+</button>
 <button @click="numberMinus(n)">-</button>


methods: {
    // 与上面Actions magActiions用法一致 也有对象传值方法
    ...mapMutations(["numberAdd", "numberMinus"]),
},

Getter

        有时候我们需要从 store 中的 state 中派生出一些状态,例如数据进行加工处理 例如放大倍数:这个时候可以在computed里面写计算属性,但是为了方便管理 Vuex提供了‘getter’

  // 计算属性 辅助函数
  getters: {
    bigOneComNumber(state) {
      return state.oneComNumber * 10
    }
  },

        直接调用 进行显示

<h2>{{ $store.getters.bigOneComNumber }}</h2>

 mapGetters 辅助函数

 <h2>{{ bigOneComNumber }}</h2>

 computed: {
   ...mapGetters(["bigOneComNumber"]),
 },

Module

        由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

        主要用于多个文件/多个store

        单个文件添加命名空间进行区别   

  namespaced: true,

         例如,新建文件oneCom.js

 

export default {
    namespaced: true, // 空间命名
    state: {
        oneComNumber: 10,
        peoppleList: [
            {
                id: 1,
                name: "张三"
            }
        ],
    },

    // Action支持异步调用Mutation来修改。  处理一些逻辑业务
    actions: {
        numberAddWait(context, v) {   // 上下文和传过来的值
            setTimeout(() => {
                context.commit("numberAdd", v)
                // context.state.oneComNumber += v
            }, 1000);
        },
    },

    // 用于操作一些数据 (state)  也可进行判断
    mutations: {
        numberAdd(state, v) {
            // if (state.oneComNumber % 2) {
            //     console.log(4546546546);
            // }
            state.oneComNumber += v
        },
        numberMinus(state, v) {   // 上下文和传过来的值
            state.oneComNumber -= v
        },


    },
    // 计算属性 辅助函数
    getters: {
        bigOneComNumber(state) {
            return state.oneComNumber * 10
        }

    },
}

index.js

import Vue from "vue";
import Vuex from "vuex";
import oneCom from './oneCom'
Vue.use(Vuex);

export default new Vuex.Store({
  strict: true,// 严格模式
  // 多个模块进行管理 管理多个文件
  modules: {
    oneCom
  }
});

页面.vue 

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png" />
    <HelloWorld msg="Welcome to Your Vue.js App" />
    <button @click="numberAdd(n)">+</button>

    <button @click="numberMinus(n)">-</button>
    <button @click="numberAddWait(n)">过一会再加</button>

    <select v-model="n">
      <option :value="1">1</option>
      <option :value="2">2</option>
      <option :value="3">3</option>
    </select>
    <h2>{{ oneComNumber }}</h2>
  </div>
</template>

<script>
import { mapMutations, mapActions, mapState } from "vuex";
// @ is an alias to /src
import HelloWorld from "@/components/HelloWorld.vue";
export default {
  name: "Home",
  components: {
    HelloWorld,
  },
  data() {
    return {
      n: 1,
    };
  },
  created() {
    console.log(this);
  },
  methods: {
    ...mapMutations("oneCom", ["numberAdd", "numberMinus"]),
    ...mapActions("oneCom", ["numberAddWait"]),
  },
  computed: {
    ...mapState("oneCom", ["oneComNumber"]),
  },
};
</script>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈vuex 五大属性 传值 获取值的方法 的相关文章

随机推荐

  • Verilog开源项目——百兆以太网交换机(一)架构设计与Feature定义

    Verilog开源项目 百兆以太网交换机 一 架构设计与Feature定义 声明 未经作者允许 禁止转载 博主主页 王 嘻嘻的CSDN主页 全新原创以太网交换机项目 Blog内容将聚焦整体架构 模块设计方面 更新周期可能会略慢 希望朋友们多
  • 树状数组详解

    Markdown版本 请点击这个链接 树状数组 Markdown版本 xiji333的博客 CSDN博客 什么是树状数组 树状数组 Binary Indexed Tree B I T Fenwick Tree 是一个查询和修改复杂度都为lo
  • Android中当数据库需要更新时我们该怎么办?

    问题 Android数据库更新并保留原来的数据如何实现 Andoird的SQLiteOpenHelper类中有一个onUpgrade方法 帮助文档中只是说当数据库升级时该方法被触发 经过实践 解决了我一连串的 疑问 1 帮助文档里说的 数据
  • Linux系统shell脚本之批量修改服务器密码

    Linux系统shell脚本之批量修改服务器密码 一 脚本要求 二 脚本内容 三 编辑原始旧密码 四 执行脚本 五 验证密码更改 1 查看更改后的密码文件 2 在远端服务器验证密码 一 脚本要求 可以批量修改服务器的密码 二 脚本内容 bi
  • 【机器学习】机器学习回归模型的最全总结!

    导读 大家好 我是泳鱼 一个乐于探索和分享AI知识的码农 回归分析为许多机器学习算法提供了坚实的基础 在这篇文章中 我们将介绍回归分析概念 7种重要的回归模型 10 个重要的回归问题和5个评价指标 什么是回归分析 回归分析是一种预测性的建模
  • Linux系统与管理 - (六)用户与组❤

    自说 学习路径 用户管理 用户管理命令 组管理 组管理命令 目录和文件的权限 自说 在Windos系统中 用户的概念我们并不陌生 它是一种身份也是一种权限 不同的用户也相应有着不同的使用 下面细说下Linux中的用户与组 学习路径 Linu
  • windows上nacos自启动的三种方法

    前提 windows上先安装nacos 备注 方法一 二都是以 windows服务 形式进行自启动 效果类似于mysql的windows服务 但这种方法nacos服务可能会启动失败 不想浪费时间的博主建议直接跳转方法三 跟nacos自启动死
  • 初级java工程师笔试题

    最近面试很头疼 因为满以为自己工作了1年多了 实际coding经验却压缩到不到1年 每每被面试官 痛扁 心里特别不痛快 总以为我能给你交活不就完了吗有必要在基础上为难我吗 相信大多数不会总结 在面试中屡屡受挫的小伙伴你也是差不多的吧 因为没
  • 邮AI——AI陪你“邮”笑邮语!

    亲爱的小伙伴们 你是否有过写邮件的时候 脑袋一片空白 就像忘记刷牙一样让人尴尬 别担心 因为有一个 邮 到了幽默智能的解决方案 邮AI 它不仅能帮你写邮件 还能陪你 邮 笑邮语 邮AI 顶级AI大脑 不只是靠模板搞笑 它是真正的幽默高手 从
  • Altium Designer借助嘉立创添加PCB封装和3D模型

    目录 引言 打开立创专业版EDA 建立项目 从立创商城找到器件编码 添加PCB封装 导出和修改3D封装 引言 由于使用Altium Designer的频率并不是特别高 所以每一次使用总是得东跌西撞的才回忆起一些使用步骤 因此 想在这里记录一
  • 【PyTorch】语言模型/Language model

    1 模型描述 1 语言模型的定义 来自于维基百科 统计式的语言模型是一个几率分布 语言模型提供上下文来区分听起来相似的单词和短语 例如 短语 再给我两份葱 让我把记忆煎成饼 和 再给我两分钟 让我把记忆结成冰 听起来相似 但意思不同 语言模
  • 移动端浏览器兼容性问题

    在开发移动端商城项目的时候 在实现功能和处理bug的过程中出现了一些之前没有见过的问题 在这里记录一下 1 IOS移动端click事件300ms的延迟响应 移动设备上的web网页是有300ms延迟的 玩玩会形成按钮点击延迟甚至是点击失效 这
  • linux查看mysql表空间使用率_查看表空间使用率sql

    10G进asm 直接su oracle 然后asmcmd 11G进asm 需要su grid 然后asmcmd 1 切换到相关oracle数据库实例下 echo ORACLE SID 查看当前数据库实例 或者进入sql下执行 select
  • 【Visual C++】游戏开发笔记二十二 游戏基础物理建模(四) 粒子系统模拟(一)

    本系列文章由zhmxy555 毛星云 编写 转载请注明出处 http blog csdn net zhmxy555 article details 7585937 作者 毛星云 邮箱 happylifemxy qq com 期待着与志同道合
  • go 反射

    文章目录 反射 反射的相关函数 基本数据类型的反射 反射设置变量值 结构体类型的反射 反射操作结构体的属性和方法 反射获取变量的类别 示例代码 运行结果 反射 包 reflect 反射可以在运行时动态获取变量 实例的各种信息 例如 变量的类
  • hbuilderx云打包ios证书的生成方法

    我们在hbuilderx打ios正式包的时候 需要私钥证书p12文件 和描述文件mobileprovision文件 但是生成这两个工具需要使用mac电脑 这对于我们使用windows电脑的同学们望而却步 幸好 我们中国有在线的生成ios证书
  • 4年后,Debian终夺回“debian.community“ 域名!

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews Daniel Pocock 是开源社区的有名的 魔头 其行为备受争议 几年前因为从事破坏 Debian 名誉和社区本身的行为而被逐出 Debian 项目 在他被开除出项目后的
  • java使用io文件输出内存溢出_完美解决java读取大文件内存溢出的问题

    1 传统方式 在内存中读取文件内容 读取文件行的标准方式是在内存中读取 Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法 Files readLines new File path 实际上是使用Buffe
  • 【openwrt学习笔记】dnsmasq源码阅读

    目录 一 DHCP Dynamic Host Configuration Protocol 1 1 前置知识 1 2 参考链接 1 3 IP地址分配代码分析 rfc2131 c dhcp common c dhcp c 1 4 几个小问题
  • 浅谈vuex 五大属性 传值 获取值的方法

    Vuex 是什么 Vuex 是一个专为 Vue js 应用程序开发的状态管理模式 它采用集中式存储管理应用的所有组件的状态 并以相应的规则保证状态以一种可预测的方式发生变化 在说属性之前要准备好一些文件 以及环境 以vue2为例 下载安装