store

store

store的目录在:@/store;

# 新增store模块

新的模块只需要在store->modules添加文件就可以,store->index.js会自动编译改store。 例如文件 stote->modules->log.js 的模板如下:

import mutationsActions from '../mutations-actions'

let state = {
  logs: []
};
export default {
  namespaced: true,
  state,
  actions: mutationsActions.actions,
  mutations: mutationsActions.mutations()
}

其中 mutationsActions.mutations() 对象中有 handler方法,其中该方法回调会返回 statedata
每个 store 对象都会被某人全部赋值。如果不需要特殊处理,那么只要在 state 对象中添加新的对象就可以。例如

let state = {
  logs: [],
  path: {},
};

如果有其他的特殊处理,请看下面的使用教程。

# 使用store

通过使用统一的赋值方法,调用每一个store 模块下的对象,实现一样的效果。
如果赋值 store->modules->log.js 下 store 的logs。

 store.dispatch('log/handleChangeVal', {
  key: 'logs',
  val: {
    // 这里填写数据
    ...log
  }
})

注意

store.dispatch 的第一个单词是store模块 modules 下文件的名称,第二个单词统一为为固定方法 handleChangeVal

  • 如果不需要特殊处理,那么key就是state对象的字段。
  • 如果需要特出处理,那么key,可以自定义,但是在改模块下的添加自定义key方法。

# 自定义store

场景:stote->modules->log.js 下 store 的path 只需要修改该对象下的 status 的值,那么store的 val 需要配合一个 noSetState:true 字段。

store 默认下值直接赋值的,如果需要单独使用自定义方法来估值,那么val对象中必须含有noSetState:true

# 调用:

store.dispatch('log/handleChangeVal', {
  key: 'customFuntion',
  val: {
    noSetState: true,
    pathData: {
      status: 1
    }
  }
})

# store->modules->log.js

import mutationsActions from '../mutations-actions'

let state = {
  path: {}
};
export default {
  namespaced: true,
  state,
  actions: mutationsActions.actions,
  mutations: mutationsActions.mutations({
    handler(state, data) {
      // 这里的key跟自定义key一致
      if (data.key === 'customFuntion') {
        stete.path['status'] = data.val.pathData.status
      }
    }
  })
}

详细可以具体查看源码里面的案例 类似自定义 store 方法请查看 uPlus (opens new window) 下对底部导航控制的store方法,文件地址:uplus permission (opens new window)