Vuex state 状态浅解
对于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 状态浅解的更多相关文章
- “全栈2019”Java多线程第十章:Thread.State线程状态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 在vue组件中使用vuex的state状态对象的5种方式
下面是store文件夹下的state.js和index.js内容 //state.js const state = { headerBgOpacity:0, loginStatus:0, count: ...
- 从最大似然到EM算法浅解
从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...
- 理解vuex的状态管理模式架构
理解vuex的状态管理模式架构 一: 什么是vuex?官方解释如下:vuex是一个专为vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证以一种可预测的 ...
- 设计模式---状态变化模式之state状态模式(State)
前提:状态变化模式 在组建构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一个问题提供了一种解决方案. 典型模式 状态模式:Stat ...
- 原生 JavaScript 实现 state 状态管理系统
原生 JavaScript 实现 state 状态管理系统 Build a state management system with vanilla JavaScript | CSS-Tricks 在 ...
- Vuex 单状态库 与 多模块状态库
之前对 Vuex 进行了简单的了解.近期在做 Vue 项目的同时重新学习了 Vuex .本篇博文主要总结一下 Vuex 单状态库和多模块 modules 的两类使用场景. 本篇所有代码是基于 Vue- ...
- Vuex.js状态管理共享数据 - day8
VScode文件目录: amount.vue代码如下: <template> <div> <!-- <h3>{{ $store.state.count }}& ...
- 分布式存储Ceph之PG状态详解
https://www.jianshu.com/p/36c2d5682d87 1. PG介绍 继上次分享的<Ceph介绍及原理架构分享>,这次主要来分享Ceph中的PG各种状态详解,PG是 ...
随机推荐
- Sublime Text 2 -Sidebar 背景色调整为黑色
Sublime Text 2 编辑器: Ctrl+` 输入安装代码,安装package control 插件 ctrl+shift+P : Package install 为什么装不上了呢?出现了什么 ...
- 201521123054 《Java程序设计》第13周学习总结
1. 本周学习总结 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? ping c ...
- 快递鸟顺丰物流api接口对接多种方法整理
目前很多自营电商平台.ERP系统.仓储系统.快递柜企业,对物流模块数据需求还是比较旺盛的.之前有介绍过简单的接口对接方法,这次给大家整理介绍两种快递数据的获取方法. 接口秘钥可以向顺丰公司申请,或者一 ...
- python 实现登录程序
本文介绍一个用python 实现的登录程序.python新手们可以参考一下. 用户信息存放于一个文件中,需要引入文件,校验输入的用户名.密码是否跟用户列表中的用户名密码相匹配,如果匹配,这登录成功,否 ...
- CSDN博客新手使用方案
CSDN博客简易使用 在CSDN上写博客,总是遇到很多问题,虽然这些问题很简单,但是对于新手来说,缺经常遇到,因此写篇博客记载. 一.CSDN的博客如何上传图片 如果有现成 ...
- LCA问题第二弹
LCA问题第二弹 上次用二分的方法给大家分享了对 LCA 问题的处理,各位应该还能回忆起来上次的方法是由子节点向根节点(自下而上)的处理,平时我们遇到的很多问题都是正向思维处理困难而逆向思维处理比较容 ...
- 关于DbContext能不能单次请求内唯一?DbContex需不需要主动释放?欢迎各路大侠来“参战”!
基于前篇文章<HiBlogs>重写笔记[1]--从DbContext到依赖注入再到自动注入园友@Flaming丶淡蓝@ 吴瑞祥 提出了讨论和质疑,吓得我连夜查询资料(玩笑~). 本来文章的 ...
- Markdown 编写规范
说明及目的 作为一个在博客园混迹了俩三年的人,一直在这里看别人的博客,现在准备开始写自己的博客,目的呢,就是一下几点吧: 项目过程中的历史经验教训积累记载,吃一堑长一智,不想在同一个坑掉进去好几次 学 ...
- Tree--RedBlackTree详解(2 - 3 - 4Tree)(红黑树)
#topics h2 { background: #2B6695; color: #FFFFFF; font-family: "微软雅黑", "宋体", &qu ...
- java复习要点(一)------- java语言的特点、java的工作原理、配置环境变量、java命令的使用
一.java语言的特点: (1)简单并面向对象 (2)鲁棒并安全: java语言在编译及运行程序时,都要进行严格的检查,防止不匹配问题的发生.如果引用一个非法类型,或执行一个非法类型操作,java减肥 ...