前标准,后标准 //通过dispatch给action发送请求,然后通过getter获得到数据
前标准,后非标准 //通过dispatch给action发送请求,然后通过mutation的dtate获得数据
前非标准,后标准 //通过commit直接跟mutation联系,然后通过getter获得到数据
前非标准,后非标准 // 通过commit直接跟mutation联系,然后通过mutation的dtate获得数据
但是这样数据的获取写的太长了,冗余
视图和vuex的交互代码太长了,冗余
new Vue({
//computed: mapGetters(['getCount']), // 这么写我们的当前组件的自定义计算属性就没有地方放了
computed: {
...mapGetters(['getCount]) //后标准
}
})
new Vue({
methods: {
...mapActions([actionsFnName])//前标准
}
})
<button @click = "mutationsFnName()"></button>
new Vue({
methods: {
...mapMutations([mutationsFnName])
}
})
const actions = {
getDataInfo ( { commit } ) {
fetch('/data.json')
.then( res => res.json() )
.then( data => {
//获取到数据之后进行动作的创建和发送
let action = {
type: 'GETDATAINFO',
payload: data//将获取到的数据赋值给payload,然后发送给mutations,再赋值states
}
commit( action )
})
.catch( error => console.log( error ))
}
}
export default actions
<!-- 目录结构 -->
store//总目录
index.js//总目录的index
home//文件夹名称
state.js
actions.js
mutations.js
getters.js
type.js
index.js
shopcar
state.js
actions.js
mutations.js
getters.js
type.js
index.js
list
state.js
actions.js
mutations.js
getters.js
type.js
index.js
user
state.js
actions.js
mutations.js
getters.js
type.js
index.js
// home 下的 index.js
import state from './state'
import actions from './actions'
import mutations from './mutations'
import getters from './getters'
const homeModule = {
state,
actions,
mutations,
getters
}
export default homeModule
// store 下的 index.js
const store = new Vuex.Store({
modules: {
//key: value // key就是目录名称, value就是目录下的index.js导出的模块
home: homeModule
}
})
export default store
import * as type from './types'
/**increment是一个方法,有两个参数,app.vue中会使用这个方法;这个方法将会发送到mutations页面
*
* increment的第一个参数是一个对象,里面规定是commit,这是一个方法,要在下面使用,发送这个对象到mutations页面,对象里面有两个参数,我们可以在这个方法中定义这个对象,然后发送出去
* 这个对象的第一个参数是type,值是mutations页面的方法名
* 这个对象的第二个参数是payload,值是app.vue中传过来的值
*
* increment的第二个参数是app.vue中传过来的
*/
const actions = {
increment ({commit},value) {//两个参数,key'是主页面通过dispatch发送过来的
// console.log('value',value)
let obj = {//这是commit的参数,是一个对象,有俩个参数
type : type.INCREMENT,//要求是一个常量,
payload : value
}
commit(obj)//发送这个对象到mutations页面,只能通过commit发送
},
yibai ({commit},value) {
let bai = {
type: type.YIBAI,
payload : value
}
commit(bai)
}
}
export default actions//导出模块
const Getters = {
addcount (state) {写一个方法,参数就是state,可以获取到里面的值
return state.count、、把值returned出去
console.log('state',state)
}
}
export default Getters
import * as type from './types';//接收./type中所有的参数,使用type.的方式使用
const mutations = {
[type.INCREMENT] (state,action) {//[type.INCREMENT]是types页面的常量,直接正常导入这个数据然后直接把这个当方法名也可以,但是由于大写的方法名书写不方便,所以我们使用[ ]的方式来写,这样才能访问到types的东西,直接type.INCREMENT是获取不到的
console.log('state',state)//第一个参数是state页面的数据
console.log('action',action)//第二个参数是actions中commit对象发送过来的那个数据
state.count++//这里可以操作state页面的数据改变
},
[type.YIBAI] (sta,ac) {
console.log(sta)
console.log(ac)
sta.a=sta.a+10
}
}
export default mutations
const state = {//定义数据,每一个key就是一个数据
count : 0,
a:100
}
export default state
export const INCREMENT = 'INCREMENT'
export const YIBAI = 'YIBAI'
import Vue from 'vue';
import vuex from 'vuex';//下载并引入vuex
//引入这些文件
import getters from './getters';
import actions from './actions';
import mutations from './mutations';
import state from './state'
Vue.use(vuex);//使用vuex
const store = new vuex.Store({//实例化vuex,然后要导出这个store
state,
actions,
mutations,
getters,
// modules
})
export default store//导出store