将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>

最新文章

  1. Win7系统卸载McAfee杀毒软件
  2. mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE
  3. python-实现生产者消费者模型
  4. android studio 项目迁移编码问题
  5. C#全角、半角转换
  6. The Dragon of Loowater
  7. C语言位取反问题
  8. goldengate 12c对oracle DB的改进
  9. meta 标签 关键字 用处
  10. cadence 封装制作小结
  11. bzoj1558
  12. 网络爬虫与搜索引擎优化(SEO)
  13. Django之admin
  14. linux svn up 中文显示乱码解决办法
  15. c/c++ 标准容器 之 初始化, 赋值, swap, 比较
  16. 终端curl调用jenkins自动化持续集成
  17. scala 基础知识总结
  18. mysql--SQL编程(关于mysql中的日期) 学习笔记2
  19. LeetCode--190--颠倒二进制位
  20. python 实现排列组合

热门文章

  1. 87. Scramble String (Java)
  2. Nginx(web服务器)与Tomcat(应用服务器)搭建集群
  3. DedeAMPZ配置php的curl扩展
  4. ldap搭建
  5. hdu1864最大报销额 01
  6. usb server
  7. WebView net::ERR_CLEARTEXT_NOT_PERMITTED&amp;&amp;net::ERR_INTERNET_DISCONNECTED
  8. 19.8.8 flutter 学习之创建第一个可变的Widget
  9. 从Buck-Boost到Flyback
  10. django前戏