当前位置:首页 > React

mobx如何与react结合

2026-03-11 05:44:23React

mobx与react结合的核心方法

使用mobx-react-litemobx-react库实现状态管理与React组件的绑定。前者适用于函数组件,后者支持类组件。

安装必要依赖

npm install mobx mobx-react-lite
# 或类组件使用
npm install mobx mobx-react

创建可观察状态

通过makeObservablemakeAutoObservable定义Store类:

import { makeAutoObservable } from "mobx";

class CounterStore {
  count = 0;

  constructor() {
    makeAutoObservable(this);
  }

  increment() {
    this.count++;
  }

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

export const counterStore = new CounterStore();

函数组件中使用

通过observer包裹组件实现响应式更新:

mobx如何与react结合

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

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

类组件中使用

使用injectobserver实现状态注入:

import { inject, observer } from "mobx-react";

@inject("counterStore")
@observer
class ClassCounter extends React.Component {
  render() {
    const { counterStore } = this.props;
    return (
      <div>
        <button onClick={() => counterStore.decrement()}>-</button>
        <span>{counterStore.count}</span>
        <button onClick={() => counterStore.increment()}>+</button>
      </div>
    );
  }
}

提供全局Store

通过React Context提供全局状态:

mobx如何与react结合

import { createContext } from "react";
export const StoreContext = createContext(null);

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

组件内访问Context

函数组件中使用useContext获取Store:

import { useContext } from "react";
import { StoreContext } from "./App";

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

计算属性和反应

在Store中使用computedreaction

class UserStore {
  users = [];

  get activeUsers() {
    return this.users.filter(user => user.isActive);
  }

  constructor() {
    makeAutoObservable(this);
    reaction(
      () => this.users.length,
      count => console.log(`Users count changed to ${count}`)
    );
  }
}

最佳实践建议

使用多个细粒度Store而非单一全局Store 对复杂组件树使用React Context传递Store 优先选择mobx-react-lite以获得更优性能 避免在渲染过程中直接修改状态

标签: mobxreact
分享给朋友:

相关文章

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。 con…

如何配置react

如何配置react

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

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…

react如何下载

react如何下载

安装 React 的步骤 通过 npm 或 yarn 安装 React,确保已安装 Node.js(版本建议 ≥ 14.0.0)。打开终端或命令行工具,运行以下命令: npx create-reac…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location.rel…

react 如何操作cookie

react 如何操作cookie

安装依赖 在React项目中操作cookie通常需要第三方库的支持,推荐使用js-cookie。通过npm或yarn安装: npm install js-cookie # 或 yarn add js…