在 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")
);
现在,你可以在任何组件中使用 useContext
和 observer
来访问 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
中的状态了。通过这种方式,你可以轻松地在组件之间共享和管理状态。
前端工程师、程序员
标签:
react hook
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通