MobX入门示例
在相当长的一段时间内,Redux 都是前端开发人员作为状态管理的首先框架,如果不会 Redux,你都不好意思跟别人说自己是搞前端的。
没过多久,开发者们开始意识到,这东西虽说盛行,但它并没有传说中的那么好用,代码写起来过于繁重,开发效率低下。MobX 出现之后,越来越多的人开始放弃 Redux,转投 MobX 的怀抱。
MobX 以一种更为优雅的方式组织状态,完全解放了开发者,使我们不再做代码的奴隶,而是真正翻身做了主人,轻松自由地管理状态。
今天,我们就来了解一下如何使用 MobX,这里不讲解它的原理和细节,只演示在项目中如何应用。
我们假设有一个 Todo 模块,那么与之对应的,应该创建一个 TodoStore 类,代码如下:
// src/stores/todo.js
// `mobx`中的三个API
import { action, observable, computed } from 'mobx';
// Todo组件对应的store
class TodoStore {
// todoList是一个被观察的数据对象
@observable todoList = [
{
name: 'doing',
}
];
// loadMore是一个用于操作数据的方法
@action loadMore() {
// 模拟异步请求
setTimeout(() => {
this.todoList = [
...this.todoList,
{
name: 'new schedule',
}
];
}, 300);
}
// 数据发生变化时自动更新total的值
@computed get total() {
return this.todoList.length;
}
}
export default new TodoStore();
一般来说,一个应用中有多个模块,所以我们需要一个 store 的入口文件,将众多模块的 store 组织起来:
// src/stores/index.js
import todoStore from './todo';
// 组织各个模块对应的store
export default {
todoStore,
};
最后,在我们应用的入口文件中,引入 stores 入口文件:
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
// `mobx-react`中的三个API
import { inject, observer, Provider } from 'mobx-react';
import stores from './stores';
// 注入需要的store 并将Todo组件定义为数据的观察者
// 注意顺序 inject在先 observer靠后
@inject('todoStore')
@observer
class Todo extends React.Component {
loadMore = () => {
// 被注入的store可以通过props访问
this.props.todoStore.loadMore();
};
render() {
const { todoStore } = this.props;
return (
<div>
<div>{ `${todoStore.total} loaded:` }</div>
{
todoStore.todoList.map((item, index) => {
return <div key={index}>{ item.name }</div>;
})
}
<div onClick={this.loadMore}>-Load More-</div>
</div>
);
}
}
ReactDOM.render(
<Provider {...stores}>
<Todo />
</Provider>,
document.getElementById('root')
);
这就是一个最简单的 MobX 应用模型了。
MobX入门示例的更多相关文章
- redux和mobx入门使用
redux和mobx入门使用 项目涉及技术 公共插件 create-react-app react-dom react-router react-router-dom react-hook redux ...
- [WCF编程]1.WCF入门示例
一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...
- Maven入门示例(3):自动部署至外部Tomcat
Maven入门示例(3):自动部署至外部Tomcat 博客分类: maven 2012原创 Maven入门示例(3):自动部署至外部Tomcat 上一篇,介绍了如何创建Maven项目以及如何在内 ...
- 1.【转】spring MVC入门示例(hello world demo)
1. Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Spring MVC 入门示例讲解
在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...
- Couchbase之个人描述及入门示例
本文不打算抄袭官方或者引用他人对Couchbase的各种描述,仅仅是自己对它的一点理解(错误之处,敬请指出),并附上一个入门示例. ASP.NET Web项目(其他web开发平台也一样)应用规模小的时 ...
- Velocity魔法堂系列一:入门示例
一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...
- OUYA游戏开发核心技术剖析OUYA游戏入门示例——StarterKit
第1章 OUYA游戏入门示例——StarterKit StarterKit是一个多场景的游戏示例,也是OUYA官方推荐给入门开发者分析的第一个完整游戏示例.本章会对StarterKit做详细介绍,包 ...
随机推荐
- springboot使用thymeleaf模板问题
返回 org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/implementsfun/index] ...
- ESA2GJK1DH1K基础篇: 硬件使用说明
开发板板载介绍 一.示意图 1.单片机:STM32C8T6 2.Wi-Fi模块:ESP8266 3.GPRS模块:Air202 4.温湿度传感器:DHT11 5.液晶:OLED(IIC) 6.继电器 ...
- 搜索法 | 1103 dfs搜索:符合条件的多项式
其实这题我已经写过两遍了,但都是在看过算法笔记的情况下写的.方法不难,只要能想出来. 找到一个项数为k,每项为p次幂,和为n,并且在有多个结果的情况下要求数字之和最大的一个多项式.如果数字之和相等.还 ...
- PATA1082Read Number in Chinese
有几点需要注意的地方一是将right转化为与left在在同一节 while (left + 4 <= right) { right -= 4;//每次将right移动4位,直到left与righ ...
- js之juery
目录 JQuery 属性选择器: 操作标签 文本操作 属性操作 文档处理 事件 JQuery 属性选择器: 属性选择器: [attribute] [attribute=value]// 属性等于 [a ...
- C语言实现linux之who功能
/* who_test.c */ #include<stdio.h> #include<string.h> #include<getopt.h> #include& ...
- DAVID 进行 GO/KEGG 功能富集分析
何为功能富集分析? 功能富集分析是将基因或者蛋白列表分成多个部分,即将一堆基因进行分类,而这里的分类标准往往是按照基因的功能来限定的.换句话说,就是把一个基因列表中,具有相似功能的基因放到一起,并和生 ...
- listings技巧
1. \lstdefinestyle 参考 https://blog.csdn.net/ProgramChangesWorld/article/details/52142313 我们在使用listin ...
- Salesforce LWC学习(八) Look Up组件实现
本篇参考https://www.salesforcelwc.in/2019/10/lookup-in-lwc.html,感谢前人种树. 我们做lightning的时候经常会遇到Look up 或者MD ...
- 监听浏览器tab选项卡选中事件,点击浏览器tab标签页回调事件,浏览器tab切换监听事件
js事件注册代码: <script> document.addEventListener('visibilitychange',function(){ //浏览器tab切换监听事件 if( ...