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优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南