vuex里面的store架构

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

原文地址:https://www.cnblogs.com/hdff/p/10238222.html

时间: 2024-10-19 22:31:12

vuex里面的store架构的相关文章

vuex里mapState,mapGetters使用详解

这次给大家带来vuex里mapState,mapGetters使用详解,vuex里mapState,mapGetters使用的注意事项有哪些,下面就是实战案例,一起来看一下. 一.介绍 vuex里面的四大金刚:State, Mutations,Actions,Getters (上次记得关于vuex笔记 http://www.jb51.net/article/138229.htm,是一个简单的应用:这是一些简单的vue的小组件方法: http://www.jb51.net/article/1382

友盟推送里面的Alias怎么用?可以理解成账号吗?

友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档写着Alias是和设备绑定的,感觉Alias算不上是严格意义的账号.不知道其它集成过友盟推送的兄弟们是否有类似的需求,是否可以通过友盟推送提供的Alias功能来满足我们的需求? 作者:沙漠链接:http://www.zhihu.com/question/31882775/answer/5425406

vue : 在vuex里写一个数组首尾元素互换的方法

不着急上代码,先想几个问题. vuex里怎么写方法? mutation里写vuex方法,组件中用commit调用. 数组首尾元素怎么互换? arr.splice(0, 0, arr[arr.length - 1]) arr.pop() 怎样让这个方法是可复用的? 组件中commit的时候提交想改的数组名字,并在vuex方法中进行检测. 需要检测啥? 1 state中是否存在这个变量 2 这个变量是不是一个符合要求(length > 1)的数组? 怎样检测是否存在这个变量? Object.keys

踩坑记录-nuxt引入vuex报错store/index.js should export a method that returns a Vuex instance.

错误 store/index.js代码如下: import Vue from 'vue'; import Vuex from 'vuex'; import city from './moudle/city' Vue.use(Vuex); //构造store const store = new Vuex.Store({ // 模块化 modules: { city: city } }); export default store; 解决办法 根据错误提示,到处一个方法,并在方法里把store导出.

Afianl框架里面的FinalBitmap加载网络图片

在Afianl框架里,FinalBitmap如何加载网络图片?有什么简单的方法吗?现在让麦子学院的android开发老师讲讲afina框架里面的finalbitmap加载网络图片的方法,Afinal里边FinalBitmap:用于显现bitmap图像,而无需思考线程并发和oom等疑问. 1.测验恳求 运用页面翻开http://avatar.csdn.net/C/6/8/1_bz419927089.jpg"可以看到一张图像. 2.新建FinalBitmap目标 1 FinalBitmap bitm

函数的上下文就是函数里面的this是谁

规律1:函数用圆括号调用,函数的上下文是window对象 比如小题目: function fun(){ var a = 888; alert(this.a); //实际上访问的是window.a } var a = 666; fun(); //弹出666 函数function fun(){}的上下文是什么!不要看它怎么定义,要看它怎么调用!!此时是fun()函数名加上圆括号直接调用,此时上下文就是window对象! 而我们知道:所有的全局变量都是window对象的属性,(注意:函数里面的局部变量

如何去除项目里面的SVN和CVS文件夹

SVN和CVS是我们常使用的项目版本管理工具,为我们的工作带来了很大的方便.但是,有时候我们需要删除里面的SVN和CVS文件夹. 1 如何快速的删除项目中的版本控制文件夹  (1) 删除项目中的SVN文件夹.我们可以使用bat脚本来实现快速递归删除,代码如下: @echo off echo Deleting SVN folders and files under: %1 REM Open Folder specified by parameter. cd %1 REM Recursive del

提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载

要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1765.html()  困难:因为页面的图片是用编辑器加进去的        :图片与文字存到数据库的字段中 :实现思路:从数据库中读取这个字段,把字段里面的src替换成lazyload 然后再返回给页面 这里主要讲是怎么把从数据库取到的数据里面的字段里面的值替换然后与页面直接的数据转换 首先 pu

直接修改别人jar包里面的class文件 工具:jclasslib

出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天,没有找到合适的方法 开始我是先用jd-gui反编译 把我需要修改的那个A.class文件反编译出来把代码保存到A.Java 然后直接在dos里面用javac A.java编译 问题来了.. 因为A.java引用了很多其他jar下面的方法 而且A.java有package 鼓捣了半天以后 最终结果:编译无法