使用vuex的state状态对象的5种方式

yizhihongxing

使用 Vuex 的 state 状态对象的 5 种方式如下:

1. 直接在组件中读取

Vuex 的 state 状态对象保存了应用中大部分的共享状态,组件可以直接从 state 中读取数据。例如,我们有一个保存用户名的 state,在组件中可以这样读取:

<template>
  <div>
    {{ username }}
  </div>
</template>

<script>
import { mapState } from 'vuex';
export default {
  computed: mapState({
    username: state => state.username,
  }),
};
</script>

这里使用了 Vuex 提供的 mapState 快捷工具,相当于在 computed 属性中声明一个函数,从 state 对象中提取数据,然后在模板中使用。

2. 辅助函数

除了读取 state 的数据,还有一些 Vuex 的辅助函数可以方便地处理 state 状态。例如:

import { mapGetters, mapMutations, mapActions } from 'vuex';

export default {
  computed: {
    // 映射 store 中的 getters,可以直接调用
    ...mapGetters([
      'getUserName',
      'getAge',
    ]),
  },
  methods: {
    // 映射 store 中的 mutations,只能同步调用
    ...mapMutations([
      'updateUserName',
    ]),
    // 映射 store 中的 actions,可以异步调用
    ...mapActions([
      'getUserInfo',
    ]),
  },
}

这里使用了 Vuex 提供的三个辅助函数:mapGettersmapMutationsmapActions 快捷工具,相当于在 computed 和 methods 属性中声明一些函数,方便调用 Vuex 的 getters、mutations 和 actions。

3. 使用带命名空间的辅助函数

如果将 Vuex 的 state 分模块组织,我们需要加上命名空间,在组件内部调用时必须标明模块的名称。例如:

import { mapState, mapActions } from 'vuex';

// users 模块的 state 对象
const usersState = {
  namespaced: true,
  state: {
    userList: [],
  },
  actions: {
    fetchUserList() {
      // 发起请求,获得用户数据
    },
  },
};

export default {
  computed: mapState('users', {
    userList: state => state.userList,
  }),
  methods: mapActions('users', [
    'fetchUserList',
  ]),
};

这里使用了带命名空间的 mapStatemapActions 快捷工具,使用 users 作为命名空间,方便地访问带命名空间的 state 和 actions。

4. 使用 $store.state 直接读取

组件也可以通过 $store.state 直接读取 state 对象的值。例如:

export default {
  computed: {
    username() {
      return this.$store.state.username;
    },
  },
  methods: {
    updateUsername(name) {
      this.$store.commit('updateUsername', name);
    },
  },
};

在 computed 属性中使用 $store.state.username 直接读取 state 对象的值;在 methods 中使用 $store.commit('updateUsername', name) 来调用 mutations,修改 state 的值。

5. 使用 Vuex 的辅助函数创建局部状态

如果有些组件的状态只在组件内使用,可以使用 Vuex 的辅助函数 createNamespacedHelpers 创建局部状态。例如:

import { createNamespacedHelpers } from 'vuex';

const { mapState, mapActions } = createNamespacedHelpers('users');

export default {
  computed: mapState({
    userList: state => state.userList,
  }),
  methods: mapActions([
    'fetchUserList',
  ]),
};

这里使用 createNamespacedHelpers 创建了命名空间为 users 的局部状态,并返回了 mapStatemapActions 辅助函数,用于访问和操作 users 模块的 state 和 actions。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用vuex的state状态对象的5种方式 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue axios 中提交表单数据(含上传文件)

    当我们使用Vue.js和axios时,我们通常需要将表单数据提交到后端交给服务器处理。这包括一些简单的表单数据提交和上传文件. 这里提供一个完整攻略如何使用Vue.js和axios提交表单数据(包含上传文件)。 设置后端服务器接受表单数据和文件 首先,我们需要设置后端服务器接受表单数据和文件,并且返回响应结果。通常情况下,我们会使用一些服务器端框架例如Dja…

    Vue 2023年5月28日
    00
  • vue下axios拦截器token刷新机制的实例代码

    下面我将为您讲解“Vue下Axios拦截器Token刷新机制的实例代码”的完整攻略,包括以下几个方面: 什么是拦截器 在使用axios发起请求时,我们可以使用拦截器对请求进行拦截、修改,以及对响应进行拦截、统一处理等操作。而在vue项目中,我们常使用axios拦截器实现Token的自动刷新机制。 实现Token的自动刷新机制 具体实现步骤如下: (1) 在m…

    Vue 2023年5月28日
    00
  • vue集成kindeditor富文本的实现示例代码

    下面详细讲解一下“Vue集成KindEditor富文本的实现示例代码”的完整攻略: 1. 安装KindEditor 首先,我们需要在项目中安装KindEditor,可以通过以下命令进行安装: npm install @xdhuxc/kindeditor –save 2. 在main.js中引入和配置KindEditor 在main.js文件中引入KindE…

    Vue 2023年5月27日
    00
  • vue几个常用跨域处理方式介绍

    接下来我会为你详细讲解“Vue几个常用跨域处理方式介绍”的完整攻略。 1. 跨域问题的原因 由于同源策略的限制,不同源的客户端脚本在没有明确授权的情况下,不能读取对方的资源,也不能获取对方的Cookie、LocalStorage或者IndexedDB等存储信息。 2. Vue中常用的跨域处理方式 在Vue中常见的跨域处理方式有以下几种: 2.1 服务器端代理…

    Vue 2023年5月28日
    00
  • 基于vue 添加axios组件,解决post传参数为null的问题

    为了解决”post传参数为null的问题”,我们需要基于vue添加axios组件,并在axios中进行相关配置。具体的攻略步骤如下: 步骤1:安装axios 我们可以使用npm或yarn等工具来安装axios,具体的命令如下: npm install axios –save 或者: yarn add axios 步骤2:创建axios配置文件 在项目的sr…

    Vue 2023年5月28日
    00
  • 用vue设计一个日历表

    对于如何用vue设计一个日历表,一般可以分为以下几个步骤: 1. 确定日历的设计需求及所需组件 首先,我们需要确定本次设计所需实现的功能以及对应的组件。一般来说,日历表需要实现以下功能: 展示当前月份的日期信息 允许用户切换月份和年份 支持选择日期并高亮显示 可以展示一些日历上的重要日子,如节假日或者自定义事件等 根据上述需求,我们可以确定需要用到一些基本的…

    Vue 2023年5月29日
    00
  • Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例

    下面是详细的攻略: Vue + WebSocket + WaveSurferJS 实现H5聊天对话交互的实例 实现思路 本实例使用Vue框架,结合WebSocket实现即时通讯,配合WaveSurferJS实现音频波形效果。 使用Vue框架建立页面,实现主要交互逻辑; 使用WebSocket实现即时通讯,并实现接收和发送消息功能; 使用WaveSurferJ…

    Vue 2023年5月28日
    00
  • VUE v-for循环中每个item节点动态绑定不同函数的实例

    要实现在VUE v-for循环中每个item节点动态绑定不同函数的实例,可以使用以下步骤: 在每个item节点上绑定一个唯一的key值,以便Vue能够追踪节点的增、删、移动操作。 <ul> <li v-for="(item, index) in items" :key="item.id"> {{…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部