VUEX-action可以修改state吗
网络编程 2021-07-04 15:02www.168986.cn编程入门
这篇文章主要介绍了VUEX-action可以修改state吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们狼蚁网站SEO优化随着长沙网络推广来一起学习学习吧
回顾下vuex,官网图如下
- Vuex 的 store 中的状态的唯一方法是提交 mutation(mutation类似于事件且必须是同步函数)
- action 提交的是 mutation,而不是直接变更状态且可以包含任意异步操作(Action通过 store.dispatch 方法触发)
一幅图看清只能通过mutation修改state的原因
mit函数源码如下
mit (_type, _payload, _options) { // check object-style mit const { type, payload, options } = unifyObjectStyle(_type, _payload, _options) const mutation = { type, payload } const entry = this._mutations[type] if (!entry) { if (process.env.NODE_ENV !== 'production') { console.error(`[vuex] unknown mutation type: ${type}`) } return } // 用来修改state this._withCommit(() => { entry.forEach(function mitIterator (handler) { handler(payload) }) }) this._subscribers.forEach(sub => sub(mutation, this.state)) if ( process.env.NODE_ENV !== 'production' && options && options.silent ) { console.warn( `[vuex] mutation type: ${type}. Silent option has been removed. ` + 'Use the filter functionality in the vue-devtools' ) } }
this._withCommit来修改state,其源代码如下
_withCommit (fn) { const mitting = this._mitting this._mitting = true fn() this._mitting = mitting }
其中_withCommit函数的参数fn是修改state的函数,在执行fn函数前,将this._mitting置为true,理由是在源代码的251行resetStoreVM函数中判断严格模式的代码,如下
if (store.strict) { enableStrictMode(store) }
当 vuex设置为严格模式, 执行enableStrictMode函数, 源码如下
function enableStrictMode (store) { // $watch 函数来观察 state的变化 store._vm.$watch(function () { return this._data.$$state }, () => { // tate变化时,调用 assert函数 if (process.env.NODE_ENV !== 'production') { // 判断 store._mitting assert(store._mitting, `do not mutate vuex store state outside mutation handlers.`) } }, { deep: true, sync: true }) }
当store._mitting(this._mitting)不为true,就会报出异常。
所以,当不是触发mutation来修改state, 就不会执行mit函数,也不会执行_withmit函数,this._mitting = true不会执行,当执行 enableStrictMode 时,会执行 assert 函数,这时store._mitting为false,就会报出异常。
回归标题action可以修改state吗
不开启严格模式的情况下可以,不提倡。
,经测试得知可以修改并修改成功,严格模式下控制台会抛异常且action是异步的,不方便DevTool 调试
我们开发要严格按照官方文档开发,避免不必要的错误产生。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指