官方文档的代码是这样的

  1. export const store = {
  2. debug: true,
  3. state: reactive({
  4. message: 'Hello!'
  5. }),
  6. setMessageAction(newValue) {
  7. if (this.debug) {
  8. console.log('setMessageAction triggered with', newValue)
  9. }
  10. this.state.message = newValue
  11. },
  12. clearMessageAction() {
  13. if (this.debug) {
  14. console.log('clearMessageAction triggered')
  15. }
  16. this.state.message = ''
  17. }
  18. }

当我使用的时候

  1. console.log(this.$store.state.message);
  2. this.$store.setMessageAction('你好');
  3. console.log(this.$store.state.message);

输出的消息是这样的

  1. Hello!
  2. setMessageAction triggered with 你好
  3. 你好

这看起来没什么问题 但是当我这么使用的时候

  1. console.log(this.$store.state.message);
  2. this.$store.state.message='你好';
  3. console.log(this.$store.state.message);

输出的消息是这样

  1. Hello!
  2. 你好

没有警告 直接绕过了setMessageAction方法

看官网的介绍是约定而不是约束,这样如果在它处修改状态值,直接绕过set方法,可能会造成未知的后果

不知道是我理解错了还是官网的意思就是让我们自己进行约束,有知道的大佬还望告知一下,

贴一下我自己写的约束代码 不知道是不是正确的路子

  1. import { reactive, readonly } from 'vue';
  2. const user_info: IUserInfo = reactive({
  3. user_name: '',
  4. system_code: '',
  5. cellphone: null,
  6. email: ''
  7. });
  8. export const store = {
  9. /**
  10. * @description: 获取用户信息
  11. * @param {*}
  12. * @return {*}
  13. */
  14. getUserInfoAction(): IUserInfo {
  15. return readonly(user_info);
  16. },
  17. /**
  18. * @description: 设置用户信息
  19. * @param {string} user_name 用户名
  20. * @param {string} system_code 系统编码
  21. * @param {number} cellphone 手机号
  22. * @param {string} email 邮箱
  23. * @return {*}
  24. */
  25. setUserInfoAction(user_name: string, system_code: string, cellphone: number, email: string): void {
  26. user_info.user_name = user_name;
  27. user_info.system_code = system_code;
  28. user_info.cellphone = cellphone;
  29. user_info.email = email;
  30. },
  31. }
  32. /**
  33. * @description: userinfo数据结构
  34. * @param {string} user_name 用户名
  35. * @param {string} system_code 系统编码
  36. * @param {number} cellphone 手机号
  37. * @param {string} email 邮箱
  38. * @return {*}
  39. */
  40. interface IUserInfo {
  41. user_name: string,
  42. system_code: string,
  43. cellphone: number,
  44. email: string
  45. }

关于vue3简单状态管理约定引发的思考的更多相关文章

  1. 为管理复杂组件状态困扰?试试 vue 简单状态管理 Store 模式【转】

    https://juejin.im/post/5cd50849f265da03a54c3877 在 vue 中,通信有几种形式: 父子组件 emit/on vuex 中共享 state 跨组件 Eve ...

  2. Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用

    在<基于 vite 创建 vue3 项目>一文中整合了 pinia,有不少伙伴不知道 pinia 是什么,本文简单介绍 pinia.主要包括三方面: pinia 的基本用法,在<基于 ...

  3. Flutter 对状态管理的认知与思考

    前言 由 编程技术交流圣地[-Flutter群-] 发起的 状态管理研究小组,将就 状态管理 相关话题进行为期 两个月 的讨论. 目前只有内定的 5 个人参与讨论,如果你对 状态管理 有什么独特的见解 ...

  4. vue总结 08状态管理vuex

      状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管 ...

  5. Vue 状态管理

    类flux状态管理的官方实现 由于多个状态分散的跨越在许多组件和交互间的各个角落,大型应用复杂度也经常逐渐增长. 为了解决这个问题,vue提供了vuex:我们有收到elm启发的状态管理库,vuex甚至 ...

  6. vue3 自己做一个轻量级状态管理,带跟踪功能,知道是谁改的,还能定位代码。

    上一篇 https://www.cnblogs.com/jyk/p/14706005.html 介绍了一个自己做的轻量级的状态管理,好多网友说,状态最重要的是跟踪功能,不能跟踪算啥状态管理? 因为vu ...

  7. vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

  8. 简简单单的Vue3(插件开发,路由系统,状态管理)

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了, ...

  9. 组件之间的通讯:vuex状态管理,state,getters,mutations,actons的简单使用(一)

    之前的文章中讲过,组件之间的通讯我们可以用$children.$parent.$refs.props.data... 但问题来了,假如项目特别大,组件之间的通讯可能会变得十分复杂... 这个时候了我们 ...

随机推荐

  1. Java知识复习(二)

    如何格式化日期? SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date dat=new Da ...

  2. 安聊服务端Netty的应用

    Netty简介 Netty是一个面向网络编程的Java基础框架,它基于异步的事件驱动,并且内置多种网络协议的支持,可以快速地开发可维护的高性能的面向协议的服务器和客户端. 安聊简介 安聊是一个即时聊天 ...

  3. 用python的matplotlib根据文件里面的数字画图像折线图

    思路:用open打开文件,再用a=filename.readlines()提取每行的数据作为列表的值,然后传递列表给matplotlib并引入对应库画出图像 代码实现:import matplotli ...

  4. JUL 日志框架

    1.JUL 简介 JUL 全称 Java Util Logging,位于java.util.logging.Logger 包.它是 java 原生的日志框架,使用时无需另外引用第三方的类库,相对其他的 ...

  5. 7、基本数据类型(tuple)

    7.1.tuple类: 1.元组元素用小括号括起来,用逗号分割每个元素,一般写元组的时候,推荐在最后加入逗号,该 逗号不占元素位置,目的是为了方便识别: tu = (111, "alex&q ...

  6. Netty实现对Websocket的支持

    一.WebSocket的简介及优势 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准.WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的 ...

  7. 24 shell 管道命令与过滤器

    1.管道命令的用法 2.使用管道命令的好处: 3.重定向和管道的区别 4.Linux管道实例 5.管道与重定向 1)管道与输入重定向 2)管道与输出重定向 6.过滤器 7.过滤器举栗 1.管道命令的用 ...

  8. linux cut的用法

    p.p1 { margin: 0; font: 12px ".PingFang SC Semibold"; color: rgba(53, 53, 53, 1) } p.p2 { ...

  9. ZSH主题

    All the current themes can be found in the themes/ directory in the oh-my-zsh distribution. See list ...

  10. mongodb oplog详解和格式分析

    1. 基本概念 oplog使用固定大小集合记录了数据库中所有修改操作的操作日志(新增.修改和删除,无查询),mongodb收到修改请求后,先在主节点(Primary)执行请求,再把操作日志保存到opl ...