当前位置:首页 > 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:

react如何使用mobx

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:

react如何使用mobx

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 监听变化:

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 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 im…

如何启动react

如何启动react

安装Node.js 确保系统已安装Node.js(建议使用LTS版本),可通过官网下载并安装。安装完成后,在终端运行以下命令验证版本: node -v npm -v 创建React项目 使用官方工…

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父…