vuex里面的store架构
2024-10-07 04:42:25
将store文件夹分为四个文件夹,分别是actions,getters,mutations,state。
action:和mutatation功能是类似的,都是修改state里面的数据,区别是action用于异步修改
getter:后端传过来的数据,如果需要做一些处理就在getter里面写。
mutations:用于处理同步数据修改
state:存放后端传过来的原生数据。
父组件通过调用action对store里面数据进行了处理,他的子组件只要调用getter就可以获取到父组件处理后的数据
如下是文件结构:
这里我们演示一个小栗子:
state.js
export default{
count: 0,
firstName: 'zha',
lastName: 'lu'
}
getter.js:拼接两个字符串
// 和computer一样,都是对后台返回的数据做处理,只是这个可以应用多个页面
export default {
fullName (state) {
const name = state.firstName + state.lastName
return name
}
}
mutations.js 执行函数updateCount
// 所有数据的修改都尽量放在mutations,将mutation写成一个对象,它同步操作,不能有异步的代码在里面
export default{
// 只能有两个参数
updateCount (state, num) {
state.count = num
}
}
actions.js 每隔一段时间提交updateCount
// 和mutations差不多,区别是是action可以存放异步的代码
export default {
updateCountAsync (store, data) {
setTimeout(() => (
store.commit('updateCount', data.num)
), data.time)
}
}
store.js:上面几个都需要在这里进行注册
import Vuex from 'vuex'
import defaultState from './state/state.js'
import mutations from './mutations/mutations'
import getters from './getters/getters.js'
import actions from './actions/actions.js'
// 通过函数,返回一个store
export default () => {
return new Vuex.Store({
state: defaultState,
mutations,
getters,
actions
})
}
App.vue
<template>
<div id="app">
<img src="./assets/logo.png">
<router-link to="/second">second</router-link>
<router-view/>
{{counter}} {{fullName}}
</div>
</template> <script>
import {
mapState,
mapGetters,
mapMutations,
mapActions
} from 'vuex'
export default {
name: 'App',
mounted () {
console.log(this.$store)
// let i = 1
// actions异步处理,未使用mapActions
// this.$store.dispatch('updateCountAsync', {
// num: 5,
// time: 2000
// })
// 使用mapActions,在调用方法的时候不用传方法名
this.updateCountAsync(
{
num: 5,
time: 2000
})
// mutations同步处理,每隔一秒进行count+1
// setInterval(() => {
// this.$store.commit('updateCount', i++)
// }, 1000)
},
computed: {
/* count () {
return this.$store.state.count
},和下面的mapState功能一致 ...要使用命令
npm i babel-preset-stage-1
*/
...mapState({
// counter: 'count'和下面一样,只是这个是传对象,下面是传方法
counter: (state) => state.count
}),
...mapGetters(['fullName'])
// 和上面一样fullName () {
// return this.$store.getters.fullName
// }
},
methods: {
...mapActions(['updateCountAsync']),
...mapMutations(['updateCount'])
}
}
</script> <style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
最新文章
- Win7系统卸载McAfee杀毒软件
- mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE
- python-实现生产者消费者模型
- android studio 项目迁移编码问题
- C#全角、半角转换
- The Dragon of Loowater
- C语言位取反问题
- goldengate 12c对oracle DB的改进
- meta 标签 关键字 用处
- cadence 封装制作小结
- bzoj1558
- 网络爬虫与搜索引擎优化(SEO)
- Django之admin
- linux svn up 中文显示乱码解决办法
- c/c++ 标准容器 之 初始化, 赋值, swap, 比较
- 终端curl调用jenkins自动化持续集成
- scala 基础知识总结
- mysql--SQL编程(关于mysql中的日期) 学习笔记2
- LeetCode--190--颠倒二进制位
- python 实现排列组合
热门文章
- 87. Scramble String (Java)
- Nginx(web服务器)与Tomcat(应用服务器)搭建集群
- DedeAMPZ配置php的curl扩展
- ldap搭建
- hdu1864最大报销额 01
- usb server
- WebView net::ERR_CLEARTEXT_NOT_PERMITTED&;&;net::ERR_INTERNET_DISCONNECTED
- 19.8.8 flutter 学习之创建第一个可变的Widget
- 从Buck-Boost到Flyback
- django前戏