博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mobx入门和较佳实践
阅读量:6881 次
发布时间:2019-06-27

本文共 2070 字,大约阅读时间需要 6 分钟。

之前讲到过我们团队从redux迁移到mobx,为什么我们抛弃了redux呢?一个很重要的原因就是使用redux开发,代码量增多,复杂度增大,同时需要维护api,action,reducer,即使是借助redux-thunk或者redux-promise这样的中间件,action这一层的代码量感觉还是太多了,光是actionType的命名都需要斟酌思考,mobx将action和reducer结合到了一起,省去了type的命名,以及es6+的装饰器的引入,整个代码量和复杂度降低了不少,自从用了mobx整个人都轻松了许多!

首先简单介绍一下mobx,他和redux类似数据都是单向流动,通过action改变state,促使view更新

下面让我们来撸一个简单的例子吧

//store.jsimport { observable, autorun, flow, computed, when, reaction, action } from 'mobx';import * as api from './api';class UserStore {    @observable    basicInfo = {};        // constructor函数里面可以放一些初始化的action    constructor() {        // when如果没有第二个参数,则返回一个promise,配合await或yield使用        when(               // 一旦...            () => false,            // ... 然后            () => this.dispose()        )    }        // 在observable对象发生变化时,会调用,第二个参数表示配置,有delay和onError    auto = autorun(        e => {            // console.log(e);        },        { delay: 3000 }    );        // autorun的变种,可以更精确的配置对象的属性    myReaction = reaction(() => this.isLogined, isLogined => console.log('myReaction'));        // 类似vue中computed的用法    @computed    get total() {        console.log(this.currentStaffInfo);        return this.currentStaffInfo;    }    getBasicInfo = flow(function*() {        try {            // 这里也可以调用其他action            this.basicInfo = (yield api.queryInfo()).payload;        } catch (error) {            this.basicInfo = {};        }    });        @action    setBasicInfo = value => {        this.basicInfo = value;    };}export default new UserStore();复制代码
//User.jsximport React, { Component } from 'react';import { observer, Provider, inject } from 'mobx-react';import UserStore from './store';@inject('UserStore')@observerclass User extends Component {    componentDidMount() {        this.props.UserStore.getBasicInfo()    }    render() {        return (            
{this.props.UserStore.basicInfo.name}
); }}export default (
);复制代码

这样就大功告成啦,怎么样,mobx是不是特别简单清爽,mobx还有很多其他特性,希望大家能够多多去探索交流!

转载于:https://juejin.im/post/5c07d21a51882518805aee3a

你可能感兴趣的文章
Duilib Edit编辑框禁止输入中文的方法
查看>>
vim使用技巧大全
查看>>
Java 集合类
查看>>
160多个android开源码汇总
查看>>
jQuery序列化表单数据 serialize()、serializeArray()及使用
查看>>
DotNetCore跨平台~Quartz热部署的福音~监控文件夹的变化
查看>>
S3C2440串口的基本使用
查看>>
[uart]linux串口的阻塞非阻塞切换
查看>>
parcel vue 简单使用
查看>>
数组循环移位的几种解法
查看>>
(4运行例子)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署
查看>>
Rxlifecycle(三):坑
查看>>
matplotlib绘图不显示问题解决plt.show()
查看>>
java多线程之happens-before
查看>>
html2canvas 实现dashed虚线边框
查看>>
MySQL/MariaDB触发器
查看>>
Android自定义view之仿微信录制视频按钮
查看>>
CSDN-markdown编辑器语法——字体、字号与颜色
查看>>
mac版本idea使用(二)-如何安装PlantUML画时序图、类图
查看>>
windows 使用 xxfpm 解决 php-cgi 进程自动关闭
查看>>