MOBX在项目开发中的具体使用

一、MOBX的认识

  • 1、mobxreact或者reactNative开发过程中进行状态管理的一个状态机,类似reduxvuex一样的,中文官方文档,相对于redux或者vuex简单直白,mobx使用的是ES7的装饰器,因此需要配置下。
  • 2、所谓的状态机,不管是reduxmobxvuex都是采用观察者模式来开发的,可以简单的把状态机(状态)理解为项目中的全局变量,只是这个全局变量采用指定的方式方法才能获取与修改。
  • 3、状态机存储在浏览器的内存中,类似浏览器自带的sessionStore的存储方式存在。

二、环境的配置

  • 1、使用create-react-app构建一个项目,传送门
  • 2、配置.babelrc支持ES7的语法,更多信息请参考

    • 1、安装包

      npm run eject # 运行命令
      npm install babel-preset-stage-2 --save-dev
      npm install babel-preset-react-native-stage-0 --save-dev
      npm install --save mobx mobx-react
    • 2、配置.babelrc

      {
        "presets": ["react-native-stage-0/decorator-support"]
      }

三、简单的使用一个状态

  • 1、定义状态

    import { observable, action } from 'mobx';
    // 定义一个观察的对象
    let appState = observable({
      timer: 10
    })
    
    // 定义action(动作)
    appState.resetTimer = action(() => {
      appState.timer = 0;
    }); 
    export default appState;
  • 2、通过属性传递到子组件中

    <div>
        <MobxTest appState={appState}/>
    </div>
  • 3、在组件中直接可以通过props获取到属性与方法

四、在大型项目中定义多个状态

  • 1、单独创建一个目录存放项目中所有的状态(一般取名store)
  • 2、定义第一个状态

    import { observable, action } from "mobx";
    export default class Timer {
      @observable
      mytimer = {
        timer: 10
      };
    
      @action
      resetTime() {
        console.log("hello word");
        this.mytimer.timer = 0;
      }
    }
  • 3、定义第二个状态

    import { observable, computed, action } from "mobx";
    
    class OrderLine {
      @observable price = 0;
      @observable amount = 1;
      // 计算属性  
      @computed
      get total() {
        return this.price * this.amount;
      }
    
      @observable length = 2;
      @computed
      get squared() {
        return this.length * this.length;
      }
      set squared(value) {
        // 这是一个自己的动作,不需要注解
        this.length = Math.pow(2, value);
      }
    
      @action.bound
      resize() {
        this.price++;
      }
    }
    
    export default OrderLine;
  • 4、在index.js中汇总

    import OrderLine from "./OrderLine";
    import Timer from "./timer";
    class Stores {
      constructor() {
        this.orderLine = new OrderLine();
        this.timer = new Timer();
      }
    }
    
    export default new Stores();
  • 5、类似redux,MOBX也有mobx-react实现mobxreact的链接(直接在根组件中使用)

    import React, { Component } from "react";
    import MobxTest from "./components/MobxTest01";
    import stores from "./store/";
    import { Provider } from "mobx-react";
    
    class App extends Component {
      render() {
        const { ...storesArray } = stores;
        return (
          <Provider {...storesArray}>
            <MobxTest />
          </Provider>
        );
      }
    }
    
    export default App;
  • 6、在别的组件中使用注解的方式使用

    说明,注解中使用的是在汇总中实例的对象,这样就实现了观察需要观察的,不想观察的就不观察

    import React, { Component } from "react";
    // 引入观察者
    import { observer, inject } from "mobx-react";
    import { observable } from "mobx";
    
    @inject("orderLine")
    @observer
    export class MobxTest extends Component {
      @observable secondsPassed = 0;
      constructor(props) {
        super(props);
        this.state = {};
      }
      render() {
        console.log(this.props);
        console.log(this.props.orderLine.amount);
        return (
          <div>
            <p>{this.props.orderLine.total}</p>
            <p>{this.secondsPassed}</p>
            <button onClick={this.onReset.bind(this)}>按钮</button>
          </div>
        );
      }
      componentWillReact() {
        console.log("componentWillReact方法");
      }
      componentWillMount() {
        console.log("componentWillMount方法");
      }
      onReset() {
        this.props.orderLine.resize();
      }
    }
    
    export default MobxTest;

五、代码下载


欢迎加入群聊,我们一起探讨前端技术栈

群号:560285778

这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Umi.js 项目和 Django 项目的连接通常是通过 API 实现的。 首先,需要在 Django 项目配置好 RESTful API,以便 Umi.js 项目可以通过 API 与其进行数据交互。 其次,在 Umi.js 项目使用 Axios、Fetch 或其他网络请求库向 Django 项目的 API 发送请求,以获取数据并完成与 Django 项目的交互。 最后,可以使用 Redux、Mobx 等状态管理工具管理 Umi.js 项目的数据状态,以保证数据的一致性和可靠性。 总的来说,Umi.js 项目与 Django 项目的连接实现起来比较简单,需要了解 RESTful API 和网络请求的基本知识。 ### 回答2: Umi.js是一个基于React的前端开发框架,而Django是一个使用Python的后端开发框架。要将Umi.js项目与Django项目连接起来,可以按照以下步骤进行: 1. 创建Django项目:首先,使用Django的命令行工具创建一个Django项目。在终端运行命令 `django-admin startproject myproject`,其"myproject"是你想要的项目名称。 2. 创建Django应用程序:接下来,在项目的目录创建一个Django应用程序。在终端运行命令 `python manage.py startapp myapp`,其"myapp"是你想要的应用程序名称。 3. 配置路由:在Django项目,你需要配置URL路由来处理来自Umi.js项目的请求。在Django项目的主文件urls.py,添加相应的路由配置。 4. 配置视图:接下来,在Django应用程序的views.py文件编写视图函数来处理Umi.js项目发送的请求。在视图函数,你可以根据具体需求进行数据处理、数据库操作等操作,并返回相应的数据给Umi.js项目。 5. 配置模型:如果你的项目需要与数据库交互,可以在Django应用程序的models.py文件定义模型类,用于与数据库表进行映射。通过模型类,你可以方便地进行数据库的增删改查操作。 6. 配置Umi.js项目:在Umi.js项目,通过配置代理将请求转发到Django项目的服务器。在.umirc.js配置文件,添加proxy配置项,将请求代理到Django项目的服务器地址。 7. 发送请求:在Umi.js项目的组件使用fetch、axios或者其他类似的工具发送请求给Django项目的服务器。根据你在Django项目配置的路由和视图,将得到相应的数据。 通过以上步骤,你可以实现Umi.js项目与Django项目的连接,前端通过发送请求到后端,后端处理数据并返回给前端展示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水痕01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值