iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >VUEX-action能否修改state
  • 846
分享到

VUEX-action能否修改state

2024-04-02 19:04:59 846人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关VueX-action能否修改state的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先回顾下vuex,官网图如下Vuex 的 store 中的状态的

这篇文章给大家分享的是有关VueX-action能否修改state的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

首先回顾下vuex,官网图如下

VUEX-action能否修改state

  • Vuex 的 store 中的状态的唯一方法是提交 mutation(mutation类似于事件且必须是同步函数)

  • action 提交的是 mutation,而不是直接变更状态且可以包含任意异步操作(Action通过 store.dispatch 方法触发)

一幅图看清只能通过mutation修改state的原因

VUEX-action能否修改state

commit函数源码如下

 commit (_type, _payload, _options) {
  // check object-style commit
  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 commitIterator (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 committing = this._committing
 this._committing = true
 fn()
 this._committing = committing
}

其中_withCommit函数的参数fn是修改state的函数,在执行fn函数前,将this._committing置为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._committing
  assert(store._committing, `do not mutate vuex store state outside mutation handlers.`)
 }
 }, { deep: true, sync: true })
}

当store._committing(this._committing)不为true,就会报出异常。
所以,当不是触发mutation来修改state, 就不会执行commit函数,也不会执行_withcommit函数,this._committing = true不会执行,当执行 enableStrictMode 时,会执行 assert 函数,这时store._committing为false,就会报出异常。

回归标题action可以修改state吗

不开启严格模式的情况下可以,但是不提倡。

综上所述,经测试得知可以修改并修改成功,但是严格模式下控制台会抛异常且action是异步的,不方便DevTool 调试

感谢各位的阅读!关于“VUEX-action能否修改state”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: VUEX-action能否修改state

本文链接: https://www.lsjlt.com/news/77000.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • VUEX-action能否修改state
    这篇文章给大家分享的是有关VUEX-action能否修改state的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先回顾下vuex,官网图如下Vuex 的 store 中的状态的...
    99+
    2024-04-02
  • vuex中能直接修改state吗
    目录vuex中能直接修改state吗在vuex中,不经过mutations能直接修改state中的数据吗?为什么在vue中使用vuex,修改state的值vuex中能直接修改stat...
    99+
    2022-11-13
    vuex修改state vuex可直接修改state vuex修改state值
  • vuex不建议在action中修改state的原因是什么
    这篇文章给大家分享的是有关vuex不建议在action中修改state的原因是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一起阅读源码吧~1.首先我们可以在src/stor...
    99+
    2024-04-02
  • vuex如何提交state&&实时监听state数据的改变
    这篇文章主要为大家展示了“vuex如何提交state&&实时监听state数据的改变”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vuex如何提...
    99+
    2024-04-02
  • react怎么修改state
    今天小编给大家分享一下react怎么修改state的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。react改变state的方...
    99+
    2023-07-04
  • vuex新手进阶篇之改变state mutations的使用
    目录1. 设置改变state的mutations事件2.提交mutations事件(常用的两种方法)总结紧接上篇文章,本篇文章讲vuex ,如何去改变state ,mutations...
    99+
    2022-11-13
    vuex改变state mutations state mutations的使用
  • react怎么修改state中的数组
    要修改state中的数组,可以使用setState方法更新state的值。在React中,不应直接修改state中的值,而是应该创建...
    99+
    2023-09-13
    react
  • React事件监听和State状态修改方式
    目录React事件监听和State状态修改React事件监听相关例子React事件监听和State状态修改 on*函数可直接使用,但只能使用在html标签上,自己创建的组件标签不可 ...
    99+
    2022-11-13
    React事件监听 State状态修改 React 监听事件
  • vue和react中props变化后如何修改state
    目录vue和react中props变化后修改state改进react改变state必须知道的知识点1.不能直接修改state2.state的更新是异步的3.state的更新是一个合并...
    99+
    2022-11-13
    vue中props react中props props修改state
  • 引用参数是否能修改调用函数中的值
    引用参数确实可以修改调用函数中的值,因为它们传递的是变量的地址,允许对原始变量进行直接修改。 引用参数是否能修改调用函数中的值 引言 在编程中,传递参数时有两种主要方法:按值传递和按引...
    99+
    2024-04-20
    引用参数 修改值 c++
  • 使用指针参数是否能修改调用函数中的值
    指针参数允许函数修改调用函数中的值:创建指针变量,它存储要修改的变量的地址。将指针参数声明为函数声明中的参数。在调用函数时,将变量的地址作为参数传递。在函数内部,使用解引用运算符 (*)...
    99+
    2024-04-19
    函数参数 关键字:指针
  • java怎么判断字段是否修改
    在Java中,可以使用以下几种方法来判断字段是否被修改:1. 使用getter和setter方法:在对象的getter方法中保存字段...
    99+
    2023-10-10
    java
  • 父组件中vuex方法更新state子组件不能及时更新并渲染怎么办
    这篇文章主要为大家展示了“父组件中vuex方法更新state子组件不能及时更新并渲染怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“父组件中vuex方法更新...
    99+
    2024-04-02
  • 修改db_files参数,是否影响业务?
    1、环境描述:Oracle 10g RAC ,在线修改db_files参数 2、操作如下 SQL> show parameter db_files NAME ...
    99+
    2024-04-02
  • jquery能不能修改input的值
    今天小编给大家分享一下jquery能不能修改input的值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • 阿里云服务器IP是否能改?
    在使用阿里云服务器的过程中,用户可能会遇到IP地址变更的问题。那么,阿里云服务器的IP地址是否可以更改呢?本文将对此进行详细说明。 阿里云服务器的IP地址是否可以更改?答案是肯定的。用户可以在阿里云控制台中进行IP地址的修改。首先,用户需要...
    99+
    2023-11-21
    阿里 是否能 服务器
  • 使用react在修改state中的数组和对象数据的时候(setState)
    目录react修改state的数组和对象数据的时候(setState)需要注意react修改数组对象的注意事项删除数组中的指定元素合并两个对象修改多层级对象的值react修改stat...
    99+
    2024-04-02
  • linux能不能修改静态ip地址
    这篇文章主要讲解了“linux能不能修改静态ip地址”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux能不能修改静态ip地址”吧!linux能修改静态ip地址。方法为:1、用ifcon...
    99+
    2023-06-30
  • 怎么用Shell脚本实现检测文件是否被修改过的功能
    本篇内容介绍了“怎么用Shell脚本实现检测文件是否被修改过的功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#!/bin/bashfun...
    99+
    2023-06-09
  • mysql修改字段的长度是否会锁表
    结论: 缩小字段长度不能使用inpalce,会锁表。放大字段长度:取决于变化前和变化后是否跨越255这个长度。以UTF8编码为例,一个字符占3个字节。字段变化1:varchar(50)--》varch...
    99+
    2023-09-17
    mysql 数据库 java
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作