mobx笔记

入门案例

1、环境搭建

创建项目

mkdir my-app
cd my-app
npm init -y

安装依赖

cnpm i webpack webpack-cli -D
cnpm i html-webpack-plugin -D
cnpm i babel-loader @babel/core @babel/preset-env -D
cnpm i @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties -D
cnpm i @babel/plugin-transform-runtime -D
cnpm i @babel/runtime -S
cnpm i mobx -S

构建项目结构

按照以下目录结构创建文件

- my-app|-- src 源文件目录|-- index.js 入口文件|-- public 静态资源目录|-- index.html|-- webpack.config.js|-- dist 打包后的静态文件目录

编写 index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title>
</head>
<body></body>
</html>

编写 webpack.config.js 配置文件

const path = require('path');
const HtmlWebPackPlugin = require('html-webpack-plugin');module.exports = {mode: 'development',entry: path.resolve(__dirname, 'src/index.js'),output: {path: path.resolve(__dirname, 'dist'),filename: 'main.js'},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: ['@babel/preset-env'],plugins: [//支持装饰器["@babel/plugin-proposal-decorators", { "legacy": true }],["@babel/plugin-proposal-class-properties", { "loose" : true }],['@babel/plugin-transform-runtime']]}}}]},plugins:[new HtmlWebPackPlugin({template: 'public/index.html',filename: 'index.html',inject: true})]
}

package.json 文件中配置打包命令:

{"scripts": {"build": "webpack --mode production"}
}

2、Mobx核心API

下面的代码需要在 src/index.js 中完成。

2.1、observable可观察的状态

  • map
import {observable} from 'mobx'
// 声明
const map = observable.map({a: 1, b: 2});
// 设置
map.set('a', 11);
// 获取
console.log(map.get('a'));
console.log(map.get('b'));
// 删除
map.delete('a');
console.log(map.get('a'));
// 判断是否存在属性
console.log(map.has('a'));
  • object
import {observable} from 'mobx'
// 声明
const obj = observable({a: 1, b: 2});
// 修改
obj.a = 11;
// 访问
console.log(obj.a, obj.b);
  • array
import {observable} from 'mobx'
const arr = observable(['a', 'b', 'c', 'd']);
// 访问
console.log(arr[0], arr[10]);
// 操作
arr.pop();
arr.push('e');
  • 基础类型
import {observable} from 'mobx'/
const num = observable.box(10);
const str = observable.box('hello');
const bool = observable.box(true);
// 获得值
console.log(num.get(), str.get(), bool.get());
// 修改值
num.set(100);
str.set('hi');
bool.set(false);
console.log(num.get(), str.get(), bool.get());

2.2、 observable装饰器

import { observable } from 'mobx'class Store{@observable arr = [];@observable obj = {a: 'htllo'};@observable map = new Map();@observable str = 'hello';@observable num = 123;@observable bool = false;
}const store = new Store();console.log(store);
console.log(store.obj.a);
console.log(store.num);

注意:vscode编译器中,js文件使用装饰器会报红。解决方式:

在根目录编写 jsconfig.json

{"compilerOptions": {"module": "commonjs","target": "es6","experimentalDecorators": true},"include": ["src/**/*"]
}

2.3、对 observables 作出响应

computed

计算值是可以根据现有的状态或其它计算值衍生出的值, 跟vue中的computed非常相似。

import { observable, computed } from 'mobx'var name = observable.box("John");var upperCaseName = computed(() =>name.get().toUpperCase()
);//name的属性值
console.log("name:",name.get());
console.log("转换后:",upperCaseName.get());//对computed返回值做监听
var disposer = upperCaseName.observe_(change => {console.log("监听到数据变化:",change.newValue,change.oldValue)
});//对observable观察的属性做修改
name.set("Dave");
name.set("Lily");

autorun

import { observable, computed, autorun } from 'mobx'const arry = observable([1,2,3])const result = computed(()=>{return arry.reduce((total,item)=>{return total + item})
})
//得到计算后的结果
console.log(result.get());//会先触发一次监听,然后每次修改 arry 都会触发
autorun(()=>{console.log('监听到修改的结果:', result.get());
})//修改 observable 被观察对象的值
arry.push(4)
arry.push(5)

2.4、改变 observables状态

import { observable, action } from 'mobx'class Store {@observable num = 10@action add(){return this.num += 1}
}const store = new Store()console.log(store.add());

3、案例应用

在react中使用mobx,需要借助mobx-react。

它的功能相当于在react中使用redux,需要借助react-redux。

首先来搭建环境:

create-react-app react-app
cd react-app
npm run eject
npm i @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties -D
npm i mobx mobx-react -S

修改package.json中babel的配置:

  "babel": {"presets": ["react-app"],"plugins": [["@babel/plugin-proposal-decorators",{"legacy": true}],["@babel/plugin-proposal-class-properties",{"loose": true}]]}

注意:vscode编译器中,js文件使用装饰器会报红。解决方式:

在根目录编写写jsconfig.json

{"compilerOptions": {"module": "commonjs","target": "es6","experimentalDecorators": true},"include": ["src/**/*"]
}

src 目录下创建 store.js ,作为项目的全局状态管理

import {observable, computed, action} from 'mobx'class Store {@observable num = 10@computed get sumOne() {return this.num += 1}@action add = ()=>{console.log(this);return this.num += 10}
}const store = new Store()export default store

在其他组件中就可以使用了,例如在 index.js 中使用

import React from 'react';
import ReactDOM from 'react-dom';
import store from './store';console.log(store.num);
console.log(store.sumOne);
console.log(store.add());ReactDOM.render(<div>hello</div>,document.getElementById('root'));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink 作为现代数据仓库的统一引擎:Hive 集成生产就绪!

在2020年&#xff0c;你的数据仓库和基础设施需要满足哪些需求&#xff1f; 我们总结了几下几点&#xff1a; 首先&#xff0c;当下的企业正快速转向更实时化的模式&#xff0c;这要求企业具备对线上流式数据进行低延迟处理的能力&#xff0c;以满足实时&#xff08;real-tim…

Elasticsearch7.15.2 基础概念和基础语法

文章目录一、基础概念1. ES是什么&#xff1f;2. 名词定义3. 对应关系4. 索引5. 分词二、基础概念2.1. 索引创建2.2. 索引/文档删除2.3. 索引修改三、ES 查询3.1. 简单查询3.2. 分页查询3.3. 复杂查询四、利用analyze api搜索4.1. 索引创建4.2. 索引查询4.3. 分词结果4.4. 索引…

技术重塑未来工作方式

作者&#xff1a; Nutanix亚太及日本地区高级副总裁兼销售负责人 Matt Young 新冠肺炎被宣布为“大流行病”之后&#xff0c;几乎在一夜之间&#xff0c;业务连续性的概念发生了根本性变化。在此之前&#xff0c;业务连续性通常指的是企业在某一办公地点遭遇像洪灾等恶劣天气或…

node环境搭建流程

1、前期准备 要把C盘下的与node和npm相关的目录删除&#xff0c;卸载安装不规范的node环境。 2、Node下载与安装 去node官网下载&#xff1a;https://nodejs.org/zh-cn/download/ 安装参考教程&#xff1a;https://www.runoob.com/nodejs/nodejs-install-setup.html node安…

Elasticsearch7.15.2 ik中文分词器 定制化分词器之扩展词库(本地)

背景&#xff1a; IK分词提供的两个分词器&#xff0c;并不支持一些新的词汇&#xff0c;有时候也不能满足实际业务需要&#xff0c;这时候&#xff0c;我们可以定义自定义词库来完成目标。 目标&#xff1a; 定制化中文分词器&#xff0c;使得我们的中文分词器支持扩展的词汇 …

多点在线构建Noxmobi全球化精准营销系统

摘要&#xff1a;大数据计算服务(MaxCompute&#xff0c;原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型&#xff0c;能够更快速的解决用户海量数据计算问题&#xff0c;有效降低企业成本&am…

云原生安全厂商小佑科技获达泰资本千万级投资

近日&#xff0c;云原生安全领导厂商小佑科技宣布&#xff0c;获得千万级人民币的天使轮融资。该轮融资由达泰资本独家投资&#xff0c;将主要用于加强云原生安全产品核心技术研发、销售网络拓展和生态伙伴建设等关键目标&#xff0c;进而为用户提供更加高效的云原生安全解决方…

Elasticsearch7.15.2 ik中文分词器 定制化分词器之扩展词库(远程)

IK分词提供的两个分词器&#xff0c;并不支持一些新的词汇&#xff0c;有时候也不能满足实际业务需要&#xff0c;这时候&#xff0c;我们可以定义自定义词库来完成目标。 文章目录一、静态web搭建1. 安装nginx2. 创建es目录3. 创建分词文件4. 存放静态5. 验证二、配置远程分词…

万博智云上云 单机软件升级多并发SaaS平台

云栖号案例库&#xff1a;【点击查看更多上云案例】 不知道怎么上云&#xff1f;看云栖号案例库&#xff0c;了解不同行业不同发展阶段的上云方案&#xff0c;助力你上云决策&#xff01; 业务痛点 自2016年开发迁移工具主要面向私有云环境&#xff0c;但是随着公有云用户越来…

学会这10大高性能开发技术,轻松躲过裁员名单!

来源 | 编程技术宇宙责编 | Carol封图 | CSDN 下载自视觉中国程序员经常要面临的一个问题就是&#xff1a;如何提高程序性能&#xff1f;这篇文章&#xff0c;我们循序渐进&#xff0c;从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进&#xff0c;串联起高性能开…

修改npm默认全局安装路径

修改NPM全局安装的默认路径&#xff08;不要轻易操作&#xff09; 查看当前的全局安装路径 npm config ls安装指定的目录安装node.js&#xff0c;例如&#xff1a; c:\nodejs。 node.js安装完成之后&#xff0c;需要在 c:\node.js 目录下创建两个文件夹&#xff1a; c:\nod…

开放搜索助力提升趣店商城20%转化率

云栖号案例库&#xff1a;【点击查看更多上云案例】 不知道怎么上云&#xff1f;看云栖号案例库&#xff0c;了解不同行业不同发展阶段的上云方案&#xff0c;助力你上云决策&#xff01; 公司介绍 趣店集团&#xff0c;成立于2014年3月&#xff0c;是中国领先的金融科技企业&…

Elasticsearch7.15.2 修改IK分词器源码实现基于MySql8的词库热更新

文章目录一、源码分析1. 默认热更新2. 热更新分析3. 方法分析二、词库热更新2.1. 导入依赖2.2. 数据库2.3. JDBC 配置2.4. 打包配置2.5. 权限策略2.6. 修改 Dictionary2.7. 热更新类2.8. 编译打包2.9. 上传2.10. 修改记录三、服务器操作3.1. 分词插件目录3.2. 解压es3.3. 移动文…

母婴企业上云 实现线上线下互动营销、一体化管理服务

云栖号案例库&#xff1a;【点击查看更多上云案例】 不知道怎么上云&#xff1f;看云栖号案例库&#xff0c;了解不同行业不同发展阶段的上云方案&#xff0c;助力你上云决策&#xff01; 公司介绍 主要从事母婴产品的销售&#xff0c;拥有三家门店&#xff0c;未上云之前采用…

确认! Python再次夺冠,老码农:崩溃!

2020年转眼已过大半&#xff0c;在近一年的编程语言榜单中&#xff0c;Python已经走上卫冕的道路&#xff0c;并且与Java的差距拉得更远了一些。以往与Java常呈现你追我赶之势&#xff0c;而这一次则是直接相差由10%增加到15%&#xff01;毋庸置疑Python的火&#xff0c;有目共…

React简介及基础用法

1、React简介 1.1、React概述 React 是用于构建用户界面的 javascript 库&#xff0c;具有声明式、组件化等特点。 1.2、MVC和MVVM模式 MVC&#xff08;Model-View-Controller&#xff0c;模型-视图-控制器&#xff09;&#xff0c;Model指模型数据&#xff0c;View是显示的…

SAP与阿里云的深度合作 为企业提供领先的SaaS 服务

云栖号案例库&#xff1a;【点击查看更多上云案例】 不知道怎么上云&#xff1f;看云栖号案例库&#xff0c;了解不同行业不同发展阶段的上云方案&#xff0c;助力你上云决策&#xff01; 什么是企业IT治理&#xff1f; 企业IT治理是对企业中IT资源的合理规划和分配&#xff0…

Docker JFrog Artifactory 7.27.10 maven私服(搭建篇)

文章目录一、docker 准备1. 安装docker2. 启动docker3. 监控docker状态二、docker 镜像2.1. 搜索JFrog Artifactory镜像2.2. 拉取镜像2.3. 开放对应端口2.4. 浏览器验证2.5. 登录一、docker 准备 1. 安装docker yum install docker2. 启动docker systemctl start docker3. 监…

阿里妈妈数据字化营销与MaxCompute的不解之缘

摘要&#xff1a; 大数据计算服务&#xff08;MaxCompute&#xff09;是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案&#xff0c;目前已在阿里巴巴内部得到大规模应用。来自阿里妈妈基础平台大规模数据处理技术专家向大家分享了MaxCompute在阿里妈妈数据字化营销解决方案…

年薪201万的华为“天才少年”曾是三本复读生,逆袭就是抓住每一次提升自己的机会 | AI大赛报名开启

当我们看到“华为最高档天才少年年薪201万的话题”冲上热搜时&#xff0c;大多数人一辈子也无法企及的数字让我们羡慕不已。而入选的大部分是计算机、软件工程、模式识别与智能系统专业&#xff0c;尽管我们知道这些专业很火&#xff0c;薪资很高&#xff0c;但对于百万年薪来说…