什么情况下使用vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。如果您需要构建是一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。
之前在做旅游页的时候对 Vuex 进行了简单的了解。近期在做 Vue 项目的同时重新学习了 Vuex 。本篇博文主要总结一下 Vuex 单状态库和多模块 modules 的两类使用场景。
本篇所有代码是基于 Vue-Cli 3.x 版本的脚手架工具进行编写的。
vuex 单状态库 Demo
这是一个仅有单个 Vuex store 状态库的 Demo。当项目中使用一个 Vuex 状态库就已经足够的时候,可以使用这种方式。
本 Demo 使用了一个 increment 与 decrement 的 增 / 减 事件来体现 store 数据的变化。
store.js
由于状态库是单一的,仅有一个 store.js 文件管理状态库。在该文件中一开始进行 import 的引入,然后使用 Vue.use(Vuex) 使用 Vuex,之后分别定义 state、mutations 和 actions,并通过 export default new Vuex.Store({state, mutations, actions}) 模块化。
// store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { count: 1 } const mutations = { increment(state) { state.count ++ }, decrement(state) { state.count -- } } const actions = { increment:({commit}) => { commit('increment') }, decrement:({commit}) => { commit('decrement') } } export default new Vuex.Store({state, mutations, actions})
main.js
在入口文件 main.js 中通过 import 引入 store,并注册到 Vue 的实例上。
import Vue from 'vue' import App from './App.vue' import store from './store' // Vue-Cli 3.x new Vue({ render: h => h(App), router, store }).$mount('#app') // Vue-Cli 2.x // new Vue({ // el: '#app', // router, // store, // components: { App }, // template: '<App/>' // })
使用 $store
在相应的组件中如下引入并在 methods 中使用 mapActions。
<template> <div class="vuex"> Vuex 全局 Store count {{$store.state.count}} <button type="button" name="button" @click="increment">加</button> <button type="button" name="button" @click="decrement">减</button> </div> </template> <script> import { mapActions } from 'vuex' export default { methods: mapActions([ 'increment', 'decrement' ]) } </script> <style scoped> </style>
Demo
关于单状态库的 Demo 请参考此 github
Github Demo
vuex 多模块状态库 Demo
当项目变得非常庞大,单个 store 无法满足需求的时候,可以通过多模块状态库管理多个 store,将各类状态分类进行维护。
本 Demo 使用了 add 与 reduce 的 增 / 减 事件来体现 store 数据的变化。
store
由于需要管理多个 store,因此在项目目录中创建 store 文件夹,并创建 modules 文件夹用来放置各个 store文件,并使用 index.js 作为入口文件。具体结构请查看 Demo。
main.js
同样在 main.js 中通过 import 引入 store,但这里是引入 index.js 这个入口文件。
import Vue from 'vue' import App from './App.vue' import store from './store/index'
使用 $store
除了使用方式有一定不同之外,methods 中的 mapActions 也更换了书写方式,第一个参数是对应 store 管理的数据,第二个参数是关于操作事件的数组。
<template lang="html"> <div class="a"> page a {{$store.state.countA.countA}} <button type="button" name="button" @click="add">增加</button> <button type="button" name="button" @click="reduce">删减</button> </div> </template> <script> import { mapActions } from 'vuex' export default { methods: mapActions('countA',['add','reduce']) } </script> <style lang="css"> </style>
Demo
关于多模块状态库的 Demo 请参考此 github
Github Demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]