react_11
MobX
介绍
需求,组件0 改变了数据,其它组件也想获得改变后的数据,如图所示
这种多个组件之间要共享状态数据,useState 就不够用了,useContext 也不好用了
能够和 react 配合使用的状态管理库有
-
MobX
-
Redux
其中 Redux API 非常难以使用,这里选择了更加符合人类习惯的 MobX,它虽然采用了面向对象的语法,但也能和函数式的代码很好地结合
文档
-
MobX 中文文档
-
MobX 官方文档
安装
npm install mobx mobx-react-lite
在异步操作里为状态属性赋值,需要放在 runInAction 里,否则会有警告错误
使用 store,所有使用 store 的组件,为了感知状态数据的变化,需要用 observer 包装,对应着图中 reactions
-
mobx 目前版本是 "mobx": "^6.10.2"
-
mobx-react-lite 目前版本是 "mobx-react-lite": "^4.0.5"
-
名词
-

-
Actions 用来修改状态数据的方法
-
Observable state 状态数据,可观察
-
Derived values 派生值,也叫 Computed values 计算值,会根据状态数据的改变而改变,具有缓存功能
-
Reactions 状态数据发生变化后要执行的操作,如 react 函数组件被重新渲染
-
使用
首先,定义一个在函数之外存储状态数据的 store,它与 useState 不同:
-
useState 里的状态数据是存储在每个组件节点上,不同组件之间没法共享
-
而 MobX 的 store 就是一个普通 js 对象,只要保证多个组件都访问此对象即可
-
import axios from "axios"; import { Student } from "../model/Student"; import { makeAutoObservable, runInAction, makeObservable, observable, action, computed } from 'mobx' import R from "../model/R"; class StudentStore {//属性 对应状态数据(observable state),可观察@observable student: Student = { id: 0, name: 'zhangsan' }//对应着action方法(用来修改状态数据的方法) //手动标识的时候使用 @action@action setName(name: string) {this.student.name = name}//对应着action方法(用来修改状态数据的方法)@action async fetch(id: number) {const resp = await axios.get<R<Student>>(`http://localhost:8080/api/students/${id}`)runInAction(() => {this.student = resp.data.data})}//派生值(derived values)或者叫计算值(computed values)会根据状态数据的改变而改变,计算值具有一个特性,//它具有缓存功能,比如第一次输入的是宋远桥,会计算出是宋大侠,第二次以及之后,如果宋远桥不变,那 //么displayName不会再执行了,它第一次执行的时候会把结果缓存起来@computed get displayName() {console.log('dispalyName 执行了')const first = this.student.name.charAt(0)if (this.student.sex === '男') {return first + '大侠'} else if (this.student.sex === '女') {return first + '女侠'}else {return ''}}//构造器constructor() { //手动标识的时候使用makeObservable(this) //自动使用的时候使用,如果不使用此代码,那么属性和方法就是普通属性和方法//makeAutoObservable(this)} } export default new StudentStore()其中 makeAutoObservable 会
-
将对象的属性 student 变成 Observable state,即状态数据
-
将对象的方法 fetch 变成 Action,即修改数据的方法
-
将 get 方法变成 Computed values
-
手动标识的时候需要在在tsconifg.json 中加入配置
-
{"compilerOptions": {// ..."experimentalDecorators": true} }
相关文章:
react_11
MobX 介绍 需求,组件0 改变了数据,其它组件也想获得改变后的数据,如图所示 这种多个组件之间要共享状态数据,useState 就不够用了,useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…...
AI:52-基于深度学习的垃圾分类
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...
[shell,hive] 在shell脚本中将hiveSQL分离出去
将Hive SQL语句写在单独的.hql文件中, 然后在shell脚本中调用这些文件来执行Hive查询。 这样可以将SQL语句与shell脚本分离,使代码更加清晰和易于维护。 基本用法 以下是一个示例,展示如何在shell脚本中使用.hql文件执行Hive查询…...
求两个(法)向量之间的rpy夹角
主要使用Eigen库实现: 1. 四元素到欧拉角的转换 #include <array> #include <Eigen/Geometry>template <typename T> inline Eigen::Matrix<typename std::remove_reference<T>::type::Scalar, 3, 1> eulerAnglesZYX(T q_in) {typedef typenam…...
[100天算法】-每个元音包含偶数次的最长子字符串(day 53)
题目描述 给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 a,e,i,o,u ,在子字符串中都恰好出现了偶数次。示例 1:输入:s &qu…...
从科幻走向现实,LLM Agent 做到哪一步了?
LLM 洪流滚滚,AI 浪潮席卷全球,在这不断冲击行业认知的一年中,Agent 以冉冉新星之态引起开发者侧目。OpenAI 科学家 Andrej Karpathy 曾言“OpenAI 在大模型领域快人一步,但在 Agent 领域,却是和大家处在同一起跑线上。…...
[笔记] 数据类型
整形 一字节(Byte,也就是平时KB、MB里面的B)就是八个二进制位(bit) 整形——int——4B无符号整形——unsigned int——4B短整形——short——2B长整型——long——4B双长整型——long long——8B 浮点型 参考博客:C 语言的浮点类型…...
QT学习之QT概述
1.1 什么是QT? Qt是一个跨平台的C图形用户界面应用程序框架。 QT特点: 跨平台,几乎支持所有的平台接口简单,容易上手,学习QT框架对学习其他框架有参考意义。一定程度上简化了内存回收机制开发效率高,能够…...
编写shell脚本,利用mysqldump实现MySQL数据库分库分表备份
查看数据和数据表 mysql -uroot -p123456 -e show databases mysql -uroot -p123456 -e show tables from cb_d 删除头部Database和数据库自带的表 mysql -uroot -p123456 -e show databases -N | egrep -v "information_schema|mysql|performance_schema|sys"编写…...
本地部署Jellyfin影音服务器并实现远程访问影音库
文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…...
【数据结构】希尔排序
文章目录 前言一、希尔排序的演示图例二、希尔排序:插入排序的优化版本☆三、核心算法思路四、算法思路步骤(一)预排序 gap>1(二)gap1 插入排序 完成排序收尾 五、码源详解(1)ShellSort1 ——…...
使用VBA打印PDF文件
使用VBA打印工作表和工作簿文件都很容易实现,但是有时需要使用VBA打印已经保存在本机的其他文件,例如PDF文件格式的账单,如果这个PDF并非由Excel生成的那么就无法使用前述方法实现。 调用Windows的Shell命令可以实现打印PDF文件。 示例代码…...
分布式ID系统设计(2)
接上文 https://editor.csdn.net/md/?articleId=133988963 类snowFlake 方案 应用举例 mongoDB ObjectID 就是一个典型的实现。数据库生成 以MySQL举例 利用给字段设置AUTO-INCREMENT来保证ID自增,每次业务使用SQL拿到MySQL的ID 这种方案的优缺点: 优点 1 简单。利用数据库实…...
http和https的区别,以及https涉及到的加密过程
一.http与https的介绍 http:超文本传输协议,是互联网应用最广泛的一种网络协议。设计的最初目的是为了提供一种发布和接收HTML页面的方法。是以明文的形式来传输的,所以就会存在一定的安全隐患(因为攻击者可以截取web服务器和网站相关的报文…...
使用php打印时间精确到毫秒及毫秒转成11位时间戳
在PHP中,可以使用microtime函数来获取当前时间,包括毫秒。以下是示例代码: // 获取当前时间戳(秒) $time microtime(true); // 将当前时间戳转换为毫秒 $milliseconds round($time * 1000); // 输出当前时间&#…...
uni-app离线打包在android studio创建的.jks证书,签名文件获取MD5问题
获取证书信息 keytool -list -v -keystore test.keystore 获取的信息中没有md5信息 可以使用以下方式获取md5. 先创建签名文件,放到项目目录下 配置build.gradle文件 在android studio 打开终端输入以下命令 ./gradlew signingReport 等待生成签名。 生成的内容…...
333333333333
一、Map 接口 接下来讲的都是基于 jdk8 来开展的。 1.1 特点 1、Map 与 Collection 并列存在。Map 是用于保存具有映射关系的数据,即 key-value。 2、Map 中的 key 和 value 可以是任何引用类型的数据类型。 3、Map 中的 key 不允许重复,原因和 HashSet…...
Python:字符串格式化
文章目录 %用法使用format方法进行格式化 %用法 格式字符说明%s字符串%c单个字符%d十进制整数%o八进制整数%x十六进制整数%e指数(基底写为e)%E指数(基底写为E) x 1235 print(%o % x) print(%d % x) print(%x % x) print(%e % x) print(%s % 65) print(%c % a)使用format方法…...
虹科示波器 | 汽车免拆检修 | 2010款江铃陆风X8车发动机怠速抖动、加速无力
一、故障现象 一辆2010款江铃陆风X8车,搭载4G6GS4N发动机,累计行驶里程约为20万km。该车在其他修理厂进行发动机大修,维修后试车,发动机怠速抖动、加速无力。用故障检测仪检测,发动机控制模块(ECMÿ…...
用废旧材料制作发光机械鱼:Circuit Playground Express与MakeCode入门实践
1. 项目概述:当废旧材料遇见微控制器每次清理工作室,看着角落里堆满的包装盒、塑料瓶和旧电线,我总在想,除了扔掉,它们还能不能有第二次生命?直到我尝试将一块小小的微控制器塞进这些“垃圾”里,…...
别再只会用阿里云加速了!手把手教你配置Docker daemon.json,优化日志与存储路径
深度优化Docker生产环境:daemon.json高阶配置实战指南 当Docker从开发测试环境走向生产部署时,默认配置往往成为性能瓶颈和系统隐患的源头。许多团队在遭遇磁盘爆满、日志失控或网络拥塞后,才意识到基础镜像加速只是Docker调优的冰山一角。本…...
当EtherCAT遇上串口调试:在STM32F401RET6上如何兼顾实时通信与日志输出
当EtherCAT遇上串口调试:在STM32F401RET6上如何兼顾实时通信与日志输出 工业自动化领域对实时性要求极高,EtherCAT作为高性能工业以太网协议,其从站开发往往需要在资源受限的微控制器上实现。STM32F401RET6凭借其Cortex-M4内核和丰富的外设资…...
把 Key User 自定义字段纳入 abapGit 管理,让扩展交付真正可追踪
在 SAP S/4HANA Cloud 的扩展项目里,Key User Extensibility 很容易被误解成一种只属于业务顾问的配置能力。打开 Custom Fields 应用,创建字段,选择 business context,启用 UI、报表、API 或表单相关用途,发布字段,业务界面上就多了一个可用字段。这个体验很轻,几乎不像…...
日期时间数据在数据分析中的实际应用
下面的内容摘录自《用R探索医药数据科学》专栏文章的部分内容(原文6364字)。 2篇2章16节:R 语言中日期时间数据的关键处理要点_r语言从数字转为日期-CSDN博客 一、日期时间数据的概念 二、获取当前日期和时间 三、日期时间数据的转换与处理…...
生物 --- 免疫力
1、免疫的概念免疫是人体的一种生理功能。识别“自己”和“非己”。破坏和排斥进入人体内的抗原物质,如病原体。指机体识别和清除外来入侵抗原及体内突变或衰老细胞,并维持自身内环境稳定的生理功能。2、免疫系统的构成免疫系统主要由免疫器官、免疫细胞…...
从8251A芯片实战出发:手把手教你用8086汇编完成串口通信初始化编程
从8251A芯片实战出发:手把手教你用8086汇编完成串口通信初始化编程 在嵌入式系统与硬件接口开发领域,掌握串口通信编程是工程师的必修技能。8251A作为经典的通用同步/异步收发器(USART)芯片,至今仍在教学和工业控制领域广泛应用。本文将带您从…...
AI智能体的开发与测试
AI智能体(AI Agent)的开发与测试是一项将大语言模型(LLM)能力转化为企业级稳定应用的系统工程。它不仅需要先进的算法,更依赖于严密的工程架构与创新的测试方法。以下是AI智能体开发与测试的全景指南:第一部…...
Kilocode框架:轻量级代码组织与复用架构实践
1. 项目概述:一个面向开发者的轻量级代码组织与复用框架最近在和一些团队交流时,发现一个挺普遍的现象:随着项目迭代,代码库越来越臃肿,不同模块间的依赖关系变得混乱,想复用一段业务逻辑或者工具函数&…...
失落大陆建模:亚特兰蒂斯数字重建的结构验证
一、项目背景与目标设定在数字孪生与虚拟考古技术飞速发展的当下,亚特兰蒂斯这一传说中失落大陆的数字重建,不仅是对古老神话的技术致敬,更是对复杂场景建模与结构验证能力的极致考验。本项目旨在依托Blender等3D建模工具,结合最新…...
