今天在学习vuex的过程中,遇到了一个很困扰人的问题,最终利用vuex的状态快照工具logger解决了问题。

问题是这样的,我在子组件中使用了mapState()函数来将状态映射至子组件中,使子组件能够获取到状态,但是发现除了第一次能够得到状态的初始值外,后面无论状态如何变更,都获取不到更新的结果。

这是子组件mapState部分的代码:

computed: mapState({
user: ({user}) => (user),
session: ({sessions, currentSessionId}) => sessions.find(session => session.id === currentSessionId)
})

在这段代码中,在其它地方,我利用action去commit状态中的mutation,并且在action和mutation的函数内部都log出来了新的值,于是我认为状态发生了改变,按照这个思路,去找为什么子组件中没有响应状态的变化,调试许久,最终无果,回去翻看vuex的文档,发现插件部分,有一个vuex自带的Logger插件,配置方式如下:

import createLogger from 'vuex/dist/logger'
// 在实例中配置Logger
const store = new Vuex.Store({
...
plugins: [createLogger()]
})

之后利用这个Logger工具,发现虽然mutation被触发并且接受到了payload,但是状态并没有发生任何变化,于是找到了问题所在,是mutation部分的问题,我的mutaition一开始是这样写的:

const store = new Vuex.store({
...
mutations: {
some ({sessions}, payload) {
// 处理sessions
}
}
})

对比官方文档发现,官方文档指明state应该作为第一参数,我想当然地对state进行了参数解构,所以导致了这个错误,把第一参数改回state,在函数内部调用state最终问题得以解决,这里说明vuex2.0.0版本的mutations中定义的mutation,第一个参数是不能解构的,这里与定义action是不同的,action的第一参数context是可以解构的。特在此记录,加深印象,避免以后踩坑。

vuex2.0.0爬坑记录 -- mutations的第一个参数state不能解构的更多相关文章

  1. mybatis-generator 详细配置及使用,爬坑记录

    mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...

  2. centos7安装Mysql爬坑记录

    centos7安装Mysql爬坑记录   查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装 ...

  3. elasticsearch 单节点搭建与爬坑记录

    elasticsearch 单节点搭建与爬坑记录   prepare   虚拟机或者云服务器(这里用的是阿里云ECS) linux---centos7 安装完毕的jdk 相应的安装包(在https:/ ...

  4. 03、Swagger2和Springmvc整合详细记录(爬坑记录)

    时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...

  5. Drone构建失败,一次drone依赖下载超时导致构建失败的爬坑记录

    Once upon a time, birds were singing in the forest, and people were dancing under the trees, It's so ...

  6. PDF转图片部分公式字符丢失问题解决的爬坑记录

    现象 PDF教材导出到系统中,由程序将PDF转为图片后合并成一张大图供前端标注,但是在标注数学和化学学科的时候且源文件是PDF的情况下出现公式部分字符丢失的情况,如下图 原件 转换后效果 WTF! 转 ...

  7. hadoop学习爬坑记录

    1. Q: hdfs管理界面50070端口设置后,无法访问情况. A: 1)停止当前所有服务./stop-all.sh 2)在hdfs-site.xml中,更改开放端口的绑定IP: <prope ...

  8. 【转】Android M(6.0) 权限爬坑之旅

    原文网址:https://yanlu.me/android-m6-0-permission-chasm/ 有一篇全面介绍Android M 运行时权限文章写的非常全面:Android M 新的运行时权 ...

  9. Android M(6.0) 权限爬坑之旅

    坑一:用Android5.0编译的apk,在Android6.0上运行完全没有问题. 在Android6.0以上才需要在运行时请求权限,在旧Android版本上保留原有逻辑,安装时授予权限. 用旧版本 ...

随机推荐

  1. 把内容生成txt文件

    StringBuilder MailLog = new StringBuilder();            string logPath = txtFile + str + DateTime.No ...

  2. jQuery iframe之间相互调用

    ,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...

  3. java修改图片大小

    import java.awt.Image; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; impo ...

  4. Ajax的基本使用

    AJAX AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = ...

  5. 选项卡切换:自动定时&主动触发事件

    最初学习的是手动触发事件,添加的是onmouseover,其中index是关键,tab标签与现实内容的div索引一一对应,遍历tab标签,当鼠标移动到某标签时,触发对应的内容div显示.for(var ...

  6. $(document).ready()方法的使用

    之前看了,锋利的jquery这本书.开始了对jquery的学习.很多东西还是不能应用自如,并没有把jquery变成自己的东西.某日程序突然失效,是单击行的时候取属性,但是不知道为什么,取不到值.$(t ...

  7. 机器学习--Classifier comparison

    最近在学习机器学习,学习和积累和一些关于机器学习的算法,今天介绍一种机器学习里面各种分类算法的比较 #!/usr/bin/python # -*- coding: utf-8 -*- "&q ...

  8. Android_SQLite之创建数据库

    今天我们主要学习了SQLite.主要是其中的创建数据库,连接这块. 现在我们先简单讲解下什么是SQLite 一.SQLite 简介 Google为Andriod的较大的数据处理提供了SQLite, 他 ...

  9. sqlserver创建,调用 带返回值存取过程

    <1>create: ALTER  proc [dbo].[common_proc] @sql1 varchar(5000), @sql2 varchar(5000) OUTPUT as ...

  10. Oracle中分区表的使用

       查询分区:Select *From user_extents WHERE partition_name='分区名'; 1)创建表空间 create tablespace HRPM0 datafi ...