当前位置:首页 > React

mobx如何管理react状态

2026-03-31 18:31:08React

Mobx 管理 React 状态的核心方法

安装依赖
在项目中安装 mobxmobx-react-lite(函数组件)或 mobx-react(类组件):

npm install mobx mobx-react-lite

创建可观察状态

通过 makeObservablemakeAutoObservable 将对象转换为可观察状态:

import { makeAutoObservable } from "mobx";

class CounterStore {
  count = 0;

  constructor() {
    makeAutoObservable(this);
  }

  increment() {
    this.count++;
  }

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

export const counterStore = new CounterStore();

在组件中使用状态

使用 observer 包裹组件,使其响应状态变化:

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>
  );
});

状态派生与计算属性

通过 computed 定义派生状态,自动缓存计算结果:

class CartStore {
  items = [];

  get total() {
    return this.items.reduce((sum, item) => sum + item.price, 0);
  }
}

异步操作处理

使用 runInAction 确保异步操作后的状态修改是原子的:

class UserStore {
  data = null;
  loading = false;

  async fetchUser() {
    this.loading = true;
    const response = await fetch("/api/user");
    runInAction(() => {
      this.data = response.data;
      this.loading = false;
    });
  }
}

多 Store 整合

通过 RootStore 组合多个 Store 并注入上下文:

mobx如何管理react状态

class RootStore {
  constructor() {
    this.userStore = new UserStore();
    this.cartStore = new CartStore();
  }
}

const rootStore = new RootStore();
const StoreContext = createContext(rootStore);

// 在组件中通过 useContext(StoreContext) 访问

最佳实践

  • 最小化观察范围:仅观察组件实际使用的数据。
  • 避免直接修改状态:通过 Action 方法修改。
  • 使用 useLocalObservable 简化局部状态管理:
    const Component = observer(() => {
      const state = useLocalObservable(() => ({
        count: 0,
        increment: () => state.count++ 
      }));
      return <button onClick={state.increment}>{state.count}</button>;
    });

标签: 状态mobx
分享给朋友:

相关文章

vue实现状态灯

vue实现状态灯

Vue 实现状态灯 在 Vue 中实现状态灯可以通过动态绑定样式或类名来实现,以下是几种常见方法: 动态类名绑定 通过计算属性或条件判断动态切换类名,控制状态灯的显示样式: <tem…

react如何控制loading状态

react如何控制loading状态

控制 Loading 状态的方法 在 React 中,可以通过多种方式控制 Loading 状态,以下是几种常见的实现方法: 使用 useState 钩子管理状态 import { useStat…

react中的状态如何使用

react中的状态如何使用

React 状态的基本使用 在 React 中,状态(State)用于存储组件内部可变的数据。类组件使用 this.state 和 this.setState,函数组件使用 useState Hook…

react如何实现状态驱动页面

react如何实现状态驱动页面

状态驱动的核心概念 在React中,状态(state)是驱动页面动态更新的核心数据源。当状态发生变化时,组件会自动重新渲染,确保UI与数据保持同步。状态可以是组件的局部状态(如useState)或全局…

react如何解决状态更新的异步问题

react如何解决状态更新的异步问题

使用回调函数 在setState中传入回调函数作为第二个参数,确保状态更新完成后再执行后续操作。适用于类组件和函数组件中useState的更新函数。 this.setState({ count:…

react如何管理状态

react如何管理状态

状态管理的基本概念 在React中,状态(state)是组件内部的数据,用于动态更新UI。状态可以是局部状态(组件内部)或全局状态(跨组件共享)。 使用useState管理局部状态 useSta…