虽然 Redux 和 MobX 是两种不同的状态管理库,但它们可以在同一个项目中一起使用
首先,确保你已经安装了 Redux 和 MobX 及其相关依赖:
npm install redux react-redux @reduxjs/toolkit mobx mobx-react-lite
创建一个 Redux store 来管理应用程序的一部分状态。例如,创建一个名为 store.js
的文件:
// store.js
import { configureStore } from '@reduxjs/toolkit';
import rootReducer from './reducers';
const store = configureStore({
reducer: rootReducer,
});
export default store;
创建一个 MobX store 来管理应用程序的另一部分状态。例如,创建一个名为 mobxStore.js
的文件:
// mobxStore.js
import { makeAutoObservable } from 'mobx';
class MobXStore {
count = 0;
constructor() {
makeAutoObservable(this);
}
increment() {
this.count++;
}
decrement() {
this.count--;
}
}
const mobxStore = new MobXStore();
export default mobxStore;
在组件中,你可以根据需要使用 Redux 和 MobX。例如,在一个名为 App.js
的组件中:
// App.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement } from './actions';
import { observer } from 'mobx-react-lite';
import mobxStore from './mobxStore';
const App = () => {
const countFromRedux = useSelector((state) => state.counter.count);
const dispatch = useDispatch();
const handleIncrement = () => {
dispatch(increment());
};
const handleDecrement = () => {
dispatch(decrement());
};
return (
<div>
<h1>Redux Count: {countFromRedux}</h1>
<button onClick={handleIncrement}>Increment</button>
<button onClick={handleDecrement}>Decrement</button>
<h1>MobX Count: {mobxStore.count}</h1>
<button onClick={() => mobxStore.increment()}>Increment</button>
<button onClick={() => mobxStore.decrement()}>Decrement</button>
</齐
);
};
export default observer(App);
在项目的入口文件(例如 index.js
)中,使用 Provider
组件提供 Redux store,并使用 mobx-react-lite
提供 MobX store:
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { Provider as MobXProvider } from 'mobx-react';
import store from './store';
import App from './App';
import mobxStore from './mobxStore';
ReactDOM.render(
<Provider store={store}>
<MobXProvider instance={mobxStore}>
<App />
</MobXProvider>
</Provider>,
document.getElementById('root')
);
领取专属 10元无门槛券
手把手带您无忧上云