使用mobx实现react的MVVM框架mobx-roof,比redux简单太多

本文介绍了如何使用mobx-Roof构建基于React的MVVM框架,强调其比Redux更简单的特性。通过创建数据模型、绑定React组件、获取action执行状态以及实现组件间的数据共享,展示了基础和高级用法。还涵盖了Model的扩展、关系处理以及中间件的使用,提供了一种ORM化的数据管理思维。
摘要由CSDN通过智能技术生成

Mobx-Roof

Mobx-Roof219是基于mobx123的简单React MVVM框架, 目标是通过更ORM化的思维来管理数据, 如通过继承重载 等面向对象方式来实现数据模型的扩展, 并通过Relation来实现数据间的关联.

下边完整的例子可以在项目example目录中找到

基础篇

先看下要实现的效果

image

1.创建模型

我们先通过createModel创建一个用户登录数据模型:

  • name: 定义类名, 类名首字母大写
  • data: 可以通过对象声明或者函数声明, 函数返回的数据会被转换成mobx的observable data, 函数的第一个参数可以当成Model实例化的初始数据
  • actions: 定义模型的方法, 可以使用async/await处理异步方法, 方法返回值会转换成Promise, 其中对象提供了set方法可以快速修改多个数据, 而toJS 方法可以将数据转换成JSON格式
  • autorun: 可以在所依赖数据变动时候自动运行定义的函数, 下边例子当User数据发生变化时候会自动保存到localStorage

import { createModel } from 'mobx-roof';
import * as api from '../api';
const STORE_KEY = 'mobx-roof';

export default createModel({
  name: 'User',
  data(initData) {
    // 从localStorage初始化数据
    let data = localStorage.getItem(STORE_KEY);
    data = data ? JSON.parse(data) : {};
    return {
      isLogin: false,
      userId: null,
      loginError: '',
      // ...
      ...data,
    };
  },
  actions: {
    async login(username, password) {
      const res = await api.login(username, password);
      if (res.success) {
        // 使用set只会触发一次数据变动事件
        this.set({
          userId: res.id,
          isLogin: true,
          // ...
        });
      } else {
        // 直接赋值会触发一次数据变动事件
        this.loginError = res.message;
      }
    },
  },
  autorun: {
    saveToLocalStorage() {
      localStorage.setItem(STORE_KEY, JSON.stringify(this.toJS()));
    },
  },
});

2.绑定到react组件

通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值