对于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. 201521123065 《Java程序设计》第3周学习总结

    1. 本周学习总结 2. 书面作业 Q1:代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 201521123074 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现 ...

  3. 201521123031 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 1.将Student对象(属性:int id, String name,int age,dou ...

  4. MyBatis学习(一)简介及入门案例

    1.什么是MyBatis? MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBati ...

  5. 笔记本win10安装node的尖酸历程。。。。。。

    在公司的电脑搭建vue环境分分钟搞定,周末闲的无聊给自己的电脑也搭建一个环境,谁知道这么多的问题,记录下这些问题,希望对那些安装node环境有问题的朋友一些帮助. 1.下载安装node 下载地址htt ...

  6. LINUX通过PXE自动部署系统

    原理介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的 ...

  7. 新建maven项目遇到Select an Archetype时没有maven-archetype-webapp处理方法

    [已经有很多博客写过相关的了.详细请去看其他博主的.这里只是记录新建的时候发生的问题给新手提供帮助.因为我跟我的同事都遇到了.因为没记录下来,又花了时间找问题.而网上好像也不多.所以记录下来.希望帮到 ...

  8. MySQL主从同步和读写分离的配置

    主服务器:192.168.1.126 从服务器:192.168.1.163 amoeba代理服务器:192.168.1.237 系统全部是CentOS 6.7 1.配置主从同步 1.1.修改主服务器( ...

  9. Spark官方2 ---------Spark 编程指南(1.5.0)

    概述 在高层次上,每个Spark应用程序都由一个运行用户main方法的driver program组成,并在集群上执行各种 parallel operations.Spark提供的主要抽象是resil ...

  10. Request.QueryString("id")与Request("id")区别

    Request从几个集合取数据是有顺序的,从前到后的顺序依次是 QueryString,Form,最后是ServerVariables.Request对象按照这样的顺序依次搜索这几个集合中的变量,如果 ...