joken-前端工程师

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
  404 随笔 :: 39 文章 :: 8 评论 :: 20万 阅读

在 React 应用中,你可以使用 MobX 的 Provider 组件来全局注入你的 store,这样你的整个应用都可以访问到这些 store。以下是如何使用 MobX 和 React Hooks 配置全局注入的示例:

首先,确保你已经安装了 MobX 和它的 React 绑定库:

npm install mobx mobx-react-lite

然后,创建一个简单的 MobX store:

// store.js
import { makeAutoObservable } from "mobx";

class CounterStore {
  count = 0;

  constructor() {
    makeAutoObservable(this);
  }

  increment() {
    this.count += 1;
  }

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

const counterStore = new CounterStore();
export default counterStore;

接下来,创建一个 RootStore 类,将所有的 store 汇总在一起:

// rootStore.js
import { makeAutoObservable } from "mobx";
import counterStore from "./store";

class RootStore {
  constructor() {
    makeAutoObservable(this);
  }

  getCounterStore = () => {
    return counterStore;
  };
}

const rootStore = new RootStore();
export default rootStore;

然后,在应用的入口文件中使用 Provider 组件来注入 RootStore

// index.js
import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "mobx-react-lite";
import App from "./App";
import rootStore from "./rootStore";

ReactDOM.render(
  <Provider rootStore={rootStore}>
    <App />
  </Provider>,
  document.getElementById("root")
);

现在,你可以在任何组件中使用 useContextobserver 来访问 RootStore 中的 store:

// CounterDisplay.js
import React, { useContext } from "react";
import { observer } from "mobx-react-lite";
import { useStore } from "./storeContext";

const CounterDisplay = observer(() => {
  const { rootStore } = useStore();
  const { count } = rootStore.getCounterStore();

  return <div>Count: {count}</div>;
});

export default CounterDisplay;
// CounterButtons.js
import React, { useContext } from "react";
import { observer } from "mobx-react-lite";
import { useStore } from "./storeContext";

const CounterButtons = observer(() => {
  const { rootStore } = useStore();
  const { increment, decrement } = rootStore.getCounterStore();

  return (
    <div>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
});

export default CounterButtons;
// storeContext.js
import React, { createContext } from "react";
import rootStore from "./rootStore";

const StoreContext = createContext(rootStore);

export const useStore = () => useContext(StoreContext);

这样,你就可以在整个应用中共享 RootStore 中的状态了。通过这种方式,你可以轻松地在组件之间共享和管理状态。

posted on   joken1310  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示