当前位置:首页 > 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 项目版本的步骤 检查当前 React 版本 在项目根目录的 package.json 文件中查看 dependencies 或 devDependencies 下的 react 和…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…