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做详细介绍,包 ...
随机推荐
- js 将图片转换为 base64
var img = document.getElementById('s_lg_img'); function getBase64Image(img) { var canvas = document. ...
- wpf, C# 实现目录对话框选择
引用:using System.Windows.Forms; 代码: FolderBrowserDialog fbWnd = new FolderBrowserDialog(); fbWnd.Desc ...
- Centos 6.X查看和设置时间时区
Centos 6.X系列操作系统的修改时区和时间的方法. 一.查看Centos的时区和时间 1.使用date命令查看Centos时区 [root@VM_centos ~]# date -R Mon, ...
- c# winform richtextbox控制每行颜色 + 滚动条始终滚动到最底部
/// <summary> /// 输出 /// </summary> /// <param name="content"></param ...
- [JS]截取字符,中英文都可以
//截取字符,中英文都可以,hasDot=true 返回值的最后还可以添加3个点 function subString(str, len, hasDot) { var newLength = 0; v ...
- kubernetes学习一:安装及部署第一个Web应用
准备工作 首先准备Kubernets的环境,使用的是centos7.5 关闭防火墙: # systemctl disable firewalld # systemctl stop firewalld ...
- 原生Ajax的怎么用?
<script> function createXMLHttpRequest() { var xmlhttp; try { //先直接创建XMLHttpRequest xmlhttp = ...
- OpenCV使用CMake和MinGW的编译安装
官方教程:https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows 软件环境: Qt:5.11 CMake-3.14.4 OpenCV-4.1. ...
- LeetCode 717. 1比特与2比特字符(1-bit and 2-bit Characters)
717. 1比特与2比特字符 LeetCode717. 1-bit and 2-bit Characters 题目描述 有两种特殊字符.第一种字符可以用一比特0来表示.第二种字符可以用两比特(10 或 ...
- idea 添加默认注释