对于Vuex中的state里面的理解总是有些欠缺,机制似乎理解了。但是还有很多的不足,在这就先浅谈下自己的理解。

  vuex 机制中,定义了全局Store,在各个vue组件面的this.$store指向的都是同一个store库,定义state状态值,在mutaion写入改变对应state里面的方法,哪里需要改变状态值时,只需要commit对应的方法即可,如果是异步提交,则用dispatch。(这里说的比较简单,想了解可以自行查阅vuex store机制)

let mutation =
{
changeVal(state,value){
console.log(value)
state.userinfo.test = value;
console.log(state.userinfo.test)
}
};
let state = {
userinfo:{userId:null}
}
Vuex.Store({
state,
mutations,
}) //这里省略了一些,我这就只看state的简单变化了,不涉及异步改变;

上面的代码只是简单的改变状态值,若要异步操作,则需要用actions,这就不做讨论。

  现在来说说我的见解,本人理解,是全局的话,其实在各自组件中,通过this.$store.state.userinfo.test = 123;这种赋值和this.$store.commit("changeVal",123)意义是不一样的,毕竟后面是官方给出的方法,是为了记录状态改变的记录。但是就改变数据的效果而言,两者似乎是一样的,我在代码中自行尝试了下,两者的赋值都是以下效果:

 <h3>{{$store.state.userinfo.test}}{{test}}</h3>
<button onclick="cg"></button>//完整的html代码就不写了 js:
//初始化
this.$store.state.userinfo.test = "t";
this.test = this.$store.state.userinfo.test; //方法
cg(value = 123){
this.$store.state.userinfo.test = value;
this.$store.commit("getcheck",value);
}

  上面的两种方式我都实验了下,最后的效果是(在该view上),页面上的test初始化后不会改变,页面上的$store.state.userinfo.test,延时改变。即点击两次后页面才会改变成123,并且我自己在代码上试了下,把value分别改为1,2,3,4,5,点击五次,页面上的$store.state.userinfo.test分别为 t->t->1->2->3->4,test始终为t;两者的效果都是这样,说明改变state的值两者都有效果,网上有人说,只能通过commit改变state似乎是有问题的,就一个全局的Store变量来看的话,各个组件改变相应的state的值。理论上应该也是可以的。自己测试了下,在另外的组件view上是可以更新数据的,只要进入其他view在该view改变state之后的话,都是能看到相应的效果。当然,在该页面上直接改变this.test的值再提交即可,不必通过state赋值改变。

  个人见解总结:1.state是可以通过this.$store.state赋值的;只要后面的view初始化,也会更新相应state的,当然最好的还是按官方来改变state;

         2 state在当前改变的view上会有延时效果。并且赋值给其他data变量不会成功。(这里面的原因,感觉应该是vue的dom重新刷新会运行在state状态改变并赋值前,但这里就会有个问题,dom更新的条件应该是state改变,现在state改变了,然后dom更新了,但是数据不是最新的,也是醉了);

                                                             

------------------------------------------------后面填坑

    1.对于上文说的this.$store.state.userinfo.test(后面简称$test),赋值给this.test后,改变后test不改变(即,上文说的赋值给data变量不会成功),针对的是$test是基本常量,如果$test是引用变量的话,this.test也会变化的。

    2 $test在页面里没有更新,是因为sotore里面定义中没有包含test,所以初始化时并没有给$test监听只需在store中定义即可解决(前面可能书写错误),所以才会延时监听

      

const state = {
userinfo:{userId:null}
} //定义后 const state = {
userinfo:{userId:null, test:null}
}

Vuex state 状态浅解的更多相关文章

  1. “全栈2019”Java多线程第十章:Thread.State线程状态详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. 在vue组件中使用vuex的state状态对象的5种方式

    下面是store文件夹下的state.js和index.js内容 //state.js const state = { headerBgOpacity:0, loginStatus:0, count: ...

  3. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

  4. 理解vuex的状态管理模式架构

    理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...

  5. 设计模式---状态变化模式之state状态模式(State)

    前提:状态变化模式 在组建构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一个问题提供了一种解决方案. 典型模式 状态模式:Stat ...

  6. 原生 JavaScript 实现 state 状态管理系统

    原生 JavaScript 实现 state 状态管理系统 Build a state management system with vanilla JavaScript | CSS-Tricks 在 ...

  7. Vuex 单状态库 与 多模块状态库

    之前对 Vuex 进行了简单的了解.近期在做 Vue 项目的同时重新学习了 Vuex .本篇博文主要总结一下 Vuex 单状态库和多模块 modules 的两类使用场景. 本篇所有代码是基于 Vue- ...

  8. Vuex.js状态管理共享数据 - day8

    VScode文件目录: amount.vue代码如下: <template> <div> <!-- <h3>{{ $store.state.count }}& ...

  9. 分布式存储Ceph之PG状态详解

    https://www.jianshu.com/p/36c2d5682d87 1. PG介绍 继上次分享的<Ceph介绍及原理架构分享>,这次主要来分享Ceph中的PG各种状态详解,PG是 ...

随机推荐

  1. 201521123090 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 参考资料: 2. 书面作业 作业参考文件下载 1.代码阅读:Child压缩包内源 ...

  2. 201521123081《Java程序设计》 第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 参考资料:百 ...

  3. Java-Preferences用法-入门

    Properties提供的应用程序解决方案主要存在两个问题: (1)配置文件不能放在主目录中,因为某些OS(如Win9X)没有主目录的概念: (2)没有标准的文件命名规则,存在文件名冲突的可能性. J ...

  4. 201521123062《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中fin ...

  5. AIX盘rw_timeout值过小导致IO ERROR

    刚下班没多久,接收到告警提示数据库的数据文件异常,且同时收到主机硬盘的IO ERROR告警 该数据库服务器为AIX+oracle 9i环境,登录主机验证关键日志告警 发现确实在18点48分有磁盘IO的 ...

  6. 【Socket编程】通过Socket实现UDP编程

    通过Socket实现UDP编程 UDP通信: 1.UDP协议(用户数据报协议)是无连接.不可靠.无序的. 2.UDP协议以数据报作为数据传输的载体. 3.使用UDP进行数据传输时,首先需要将要传输的数 ...

  7. Fabric 1.0的多机部署

    Fabric1.0已经正式发布一段时间了,官方给出的单机部署的脚本也很完备,基本上傻瓜式的一键部署,直接运行官方的network_setup.sh up即可.但是在实际生产环境,我们不可能把所有的节点 ...

  8. 使用cocos2d脚本生成lua绑定

    这几天要老大要求把DragonBones移到cocos2dx 3.0 里边,并且绑定lua使用接口.因为刚学lua,使用的引擎也刚从2.2改为3.0,各种不熟悉,折腾了好几天才弄完,有空了总结一下 这 ...

  9. JDFS:一款分布式文件管理系统,第三篇(流式云存储)

    一 前言 看了一下,距离上一篇博客的发表已经过去了4个月,时间过得好快啊.本篇博客是JDFS系列的第三篇博客,JDFS的目的是为了实现一个分布式的文件管理系统,前两篇实现了基本的上传.下载功能,但是那 ...

  10. oracle 数据库管理员

    一.数据库管理员每个oracle数据库应该至少有一个数据库管理员(dba),对于一个小的数据库,一个dba就够了,但是对于一个大的数据库可能需要多个dba分担不同的管理职责.那么一个数据库管理员的主要 ...