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。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程