React使用mobx

React使用mobx

一、mobx简介

mobx它是一个简单、 可扩展的状态管理。作用和redux是一样的,但是它的写法要比redux要简单许多,也是现在react生态中非常流行的一个状态管理(react官方还推荐一段时间)。

mobx5它是使用装饰器来完成的,对于函数组件支持不是太好,适合类组件

mobx6它已不使用装饰器,对于函数组件也支持

二、安装

mobx5建议在17及以下版本的react中去使用,建议在类组件中去使用mobx5

npm i -S mobx@5 mobx-react@5 --force

三、定义mobx库

 import { observable, computed, action } from "mobx";
// mobx5就是通过装饰器来完成对于属性和方法的装饰,来实现数据的响应式

// 定义一个类
class Store {
  // 让此属性变成一个响应式的属性
  @observable
  num = 100;

  @observable users = [];

  // action让成员方法,变成一个可以操作响应数据的方法
  // xx.bound  可以解决this指向问题,一般解构后使用此方法才会有this指向不对问题
  @action.bound
  setNum(n) {
    this.num += n;
    // console.log('mobx', n, this.num)
  }

  @action.bound
  setUsers(data) {
    this.users = data;
  }

  // 异步
  // 如果此方法中有异步操作,不建议直接在此方法完成对于响应属性进行修改
  // 而是再定义一个方法专门来修改此响应属性
  @action.bound
  async fetchUsers(page = 1) {
    console.log(this);
    let ret = await (await fetch("/api/users?page=" + page)).json();
    this.setUsers(ret.data);
  }
}

// {store:store对象实例}
export default { store: new Store() };

四、mobx的使用

import React, { Component } from 'react'
import { observer, inject } from 'mobx-react'

@inject(['store']) // 把store映射到this.props.store中
@observer // 让组件是一个响应式的组件
class App extends Component {
  componentDidMount() {
    let { fetchUsers } = this.props.store
    // this.props.store.fetchUsers(2)
    fetchUsers(2)
  }

  render() {
    let { num, setNum, users } = this.props.store
    return (
      <div>
        <h3>mobx5的使用 --- {num}</h3>
        <button
          onClick={() => {
            setNum(1)
          }}
        >
          累加mobx中的num属性
        </button>
        <hr />
        <ul>
          {users.map(item => (
            <li key={item.id}>{item.name}</li>
          ))}
        </ul>
      </div>
    )
  }
}

export default App

React-MobxReact应用程序和Mobx状态管理库的结合。它帮助开发人员在应用程序中轻松管理和更新状态,同时提高应用程序的性能。 下面是使用React-Mobx的基本步骤: 1. 安装React-Mobx使用npm安装React-Mobx库。 ``` npm install mobx mobx-react --save ``` 2. 创建一个store:一个store是包含应用程序状态的对象。它可以包含数据和方法,用于更新和管理状态。 ```javascript import { observable, action } from 'mobx'; class CounterStore { @observable count = 0; @action increment() { this.count++; } @action decrement() { this.count--; } } const counterStore = new CounterStore(); export default counterStore; ``` 3.React组件中使用store:使用`Provider`组件将store传递给React组件,然后使用`inject`和`observer`高阶组件包装组件。 ```javascript import React from 'react'; import { Provider, inject, observer } from 'mobx-react'; import counterStore from './counterStore'; @inject('counterStore') @observer class Counter extends React.Component { render() { const { counterStore } = this.props; return ( <div> <h1>Count: {counterStore.count}</h1> <button onClick={counterStore.increment}>+</button> <button onClick={counterStore.decrement}>-</button> </div> ); } } const App = () => ( <Provider counterStore={counterStore}> <Counter /> </Provider> ); export default App; ``` 在这个例子中,`inject`高阶组件将store作为props传递给`Counter`组件,`observer`高阶组件将组件转换为响应式组件,使组件能够响应store中状态的更改。 4. 更新状态:使用store中的方法更新状态。 ```javascript import counterStore from './counterStore'; counterStore.increment(); counterStore.decrement(); ``` 这些是使用React-Mobx的基本步骤。使用React-Mobx可以更轻松地管理和更新状态,同时提高应用程序的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值