当前位置:首页 > React

react如何使用mobx

2026-02-26 13:25:42React

在 React 中使用 MobX 的步骤

安装依赖

确保项目中安装了 mobxmobx-react-lite(或 mobx-react,后者支持类组件)。通过以下命令安装:

npm install mobx mobx-react-lite
# 或
yarn add mobx mobx-react-lite

创建 MobX Store

定义一个可观察的 Store 类或对象,使用 makeObservablemakeAutoObservable 装饰状态和动作:

import { makeAutoObservable } from "mobx";

class CounterStore {
  count = 0;

  constructor() {
    makeAutoObservable(this);
  }

  increment() {
    this.count++;
  }

  decrement() {
    this.count--;
  }
}

export const counterStore = new CounterStore();

在组件中使用 Store

通过 observer 包装组件,使其响应 Store 的变化。使用 React 的 Context 或直接导入 Store:

import { observer } from "mobx-react-lite";
import { counterStore } from "./CounterStore";

const Counter = observer(() => {
  return (
    <div>
      <button onClick={() => counterStore.decrement()}>-</button>
      <span>{counterStore.count}</span>
      <button onClick={() => counterStore.increment()}>+</button>
    </div>
  );
});

export default Counter;

可选:使用 Provider 注入 Store

通过 Provider 全局共享 Store,避免直接导入:

import { Provider } from "mobx-react-lite";
import { counterStore } from "./CounterStore";

function App() {
  return (
    <Provider counterStore={counterStore}>
      <Counter />
    </Provider>
  );
}

在子组件中通过 useContextinject 获取 Store:

import { observer, useLocalObservable } from "mobx-react-lite";
import { useContext } from "react";
import { MobXProviderContext } from "mobx-react-lite";

const Counter = observer(() => {
  const { counterStore } = useContext(MobXProviderContext);
  return <span>{counterStore.count}</span>;
});

处理异步操作

在 MobX 中,异步操作可以通过 runInActionflow 处理:

import { flow, makeAutoObservable } from "mobx";

class AsyncStore {
  data = null;
  loading = false;

  constructor() {
    makeAutoObservable(this);
  }

  fetchData = flow(function* () {
    this.loading = true;
    try {
      const response = yield fetch("/api/data");
      this.data = yield response.json();
    } catch (error) {
      console.error(error);
    } finally {
      this.loading = false;
    }
  });
}

计算属性和反应

使用 computed 定义派生状态,或 autorun/reaction 监听变化:

react如何使用mobx

class UserStore {
  firstName = "John";
  lastName = "Doe";

  constructor() {
    makeAutoObservable(this, {
      fullName: computed,
    });
  }

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

注意事项

  • 确保组件被 observer 包装,否则不会响应状态变化。
  • 避免在渲染中直接修改状态,应在动作(Action)中完成。
  • 类组件使用 mobx-react,函数组件推荐 mobx-react-lite

分享给朋友:

相关文章

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

react 如何遍历

react 如何遍历

遍历数组 在React中遍历数组通常使用map方法,它会返回一个新的数组。map是处理数组并渲染列表元素的首选方法。 const items = ['Apple', 'Banana', 'Cherr…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

如何升级react native

如何升级react native

升级 React Native 的步骤 检查当前版本 运行以下命令查看当前项目的 React Native 版本: react-native --version 更新 React Native CL…