博客
关于我
Vuex使用详解
阅读量:484 次
发布时间:2019-03-07

本文共 3542 字,大约阅读时间需要 11 分钟。

Vuex 是 Vue.js 应用程序中实现组件全局状态管理的强大工具,它允许开发者高效地管理和共享应用程序中的数据。下面将从安装、Store 实现、状态管理等方面详细阐述 Vuex 的使用技巧和实践经验。

###Vuex 安装

在开始使用 Vuex 之前,首先需要通过 npm 下载相关包:

npm install vuex --save

接下来,在项目的 src 目录下创建一个 store 文件夹,并在其中创建 index.js 文件,以配置全局状态存储的具体设置:

import Vue from 'vue'import Vuex from 'vuex'export default new Vuex.Store({  strict: true,  state: {    // 数据存储的公共源放在这里    counter: 0,    user: {      normal: false,      id: '',      username: '',      password: '',      telephone: '',      email: '',      qqNumber: '',      level: ''    }  },  mutations: {    // 定义状态变更操作  },  actions: {    // 定义异步操作或其他复杂逻辑  },  modules: {}})

然后,在主组件文件(通常是 main.jsApp.vue)中使用 Vuex:

Vue.use(Vuex)

###Vuex 的核心原理

  • 集中管理状态数据:Vuex 的核心目标是集中管理应用程序中所有组件共享的状态数据,便于开发者维护和管理。

  • 响应式数据 пода:Vuex 中的状态数据是响应式的,能够实时同步显示数据变化,避免了手动刷新或状态更新的复杂操作。

  • 支持组件间数据通信:通过Vuex,组件之间可以无缝共享数据,减少了传递 props 或事件的复杂性。

  • ###状态数据的高效管理

    ####页面刷新导致数据丢失的解决方案

    当页面刷新时,当前Vuex中的状态数据可能会丢失。为避免这种问题,可以结合 localStoragesessionStorage 存储状态数据。

    方法一:使用 sessionStorage

    App.vue 中添加以下代码:

    if (sessionStorage.getItem("store")) {  this.$store.replaceState(    Object.assign({}, this.$store.state),    JSON.parse(sessionStorage.getItem("store"))  );}

    在页面刷新前储存数据:

    window.addEventListener("beforeunload", () => {  sessionStorage.setItem("store", JSON.stringify(this.$store.state));});

    方法二:使用插件 vuex-persistedstate

    首先安装插件:

    npm install vuex-persistedstate --save

    然后在 store/index.js 中添加以下代码:

    import createPersistedState from "vuex-persistedstate"export default new Vuex.Store({  plugins: [createPersistedState()],  state: {    // 数据存储在这里  },  mutations: {},  actions: {},  modules: {}})

    可以进一步指定存储方式:

    import createPersistedState from "vuex-persistedstate"export default new Vuex.Store({  plugins: [createPersistedState({ storage: window.sessionStorage })],  state: {    // 数据存储在这里  },  mutations: {},  actions: {},  modules: {}})

    这样,Vuex 的状态数据将自动保存到sessionStorage 中,页面刷新后会自动加载。

    ###Vuex � enquen 组件开发

    ####状态获取

    Vuex 提供了两种方式来获取组件中的全局状态数据:

    方式一:直接访问 Store 的状态

    在组件中直接访问:

    this.$store.state.couter

    方式二:导入状态并映射到 computed 属性

    在组件中导入并映射:

    import { mapState } from 'vuex'export default {  name: "Header",  computed: {    ...mapState(['counter'])  }}

    ####状态修改

    Vuex 提供 Mutation 来描述状态变更操作,Mutation 是同步的,操作必须在 mutation 中执行:

    this.$store.commit('add', 3)

    可以通过导入 mapMutations 以简化调用:

    import { mapMutations } from 'vuex'export default {  methods: {    ...mapMutations(['add', 'remove']),    handleRemove() {      this.remove()    }  }}

    ####异步操作处理

    Vuex 的 Action 用于处理异步逻辑,必须通过 commit 提交 mutation:

    actions: {  async addAsync(context, step) {    await new Promise(resolve => setTimeout(resolve, 1000));    context.commit('add', step);  }}

    通过导入 mapActions 负载方法:

    import { mapActions } from 'vuex'export default {  methods: {    ...mapActions(['addAsync']),    handleAsync() {      this.addAsync(3);    }  }}

    ###Getter 的应用

    Getter 用于对 Store 的状态进行处理和转换,可以作为计算属性使用:

    export default new Vuex.Store({  state: {    counter: 0  },  getters: {    shownNum: (state) => {      return `当前数据是 ${state.counter}`;    }  }})

    组件中使用 Getter 有两种方式:

    方式一:直接访问 Getter

    this.$store.getters.shownNum

    方式二:导入 mapGetters

    import { mapGetters } from 'vuex'export default {  computed: {    ...mapGetters(['shownNum'])  }}

    ###模块化管理

    Vuex 支持将大型应用划分为多个模块,独立管理局部状态:

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

    局部使用模块:

    ###总结

    通过以上方法,可以高效地为 Vue.js 应用实现全局状态管理、数据持久化和异步操作处理。Vuex 的响应式数据管理和模块化架构设计为开发者提供了强大的工具,简化了状态管理带来的复杂性,提升了开发效率。如果你在项目中使用了Vuex,介绍它的核心功能和使用技巧,无疑会为团队的开发工作带来实质性的帮助。

    转载地址:http://ssjcz.baihongyu.com/

    你可能感兴趣的文章
    day04_CSS选择器
    查看>>
    js 获取时间戳的方法
    查看>>
    C++ 底层语言的信仰-指针分类
    查看>>
    DFS
    查看>>
    爬取某瓣电影中你好,李焕英电影的短评并生成词云
    查看>>
    概念模型向逻辑模型的转换
    查看>>
    An internal error occurred while showing an internal error.
    查看>>
    python基础语法
    查看>>
    const修饰指针(常量指针与指针常量的区别)
    查看>>
    设计模式-创建型02-工厂模式-工厂方法模式01
    查看>>
    设计模式-行为型09-访问者模式(Visitor)
    查看>>
    微信小程序sort时间排序
    查看>>
    13个JavaScript单行式代码
    查看>>
    5个很常用的CSS3网页小实例
    查看>>
    前端基础知识整理汇总(上)
    查看>>
    微信小程序 - 实现左滑动删除功能
    查看>>
    <s>
    查看>>
    OBDC无法创建sql server连接
    查看>>
    常见错误
    查看>>
    finger
    查看>>