在使用MobX持久化存储时,将MobX与React上下文(Context)一起使用可以带来一些优势,但也需要注意一些细节。以下是关于这个问题的完整答案:
mobx-persist
或mobx-persist-webextension
。React.createContext
创建的上下文。适用于需要在多个组件之间共享状态,并且希望这些状态在页面刷新后仍然保持的应用。
以下是一个简单的示例,展示如何将MobX与React Context结合使用,并实现持久化存储:
import React, { createContext, useContext, useEffect, useState } from 'react';
import { observable, action, makeObservable } from 'mobx';
import { persist } from 'mobx-persist';
// 创建MobX store
class Store {
@observable count = 0;
constructor() {
makeObservable(this);
persist(this, { storage: window.localStorage });
}
@action increment() {
this.count++;
}
@action decrement() {
this.count--;
}
}
const store = new Store();
// 创建React Context
const StoreContext = createContext(store);
// 提供者组件
const StoreProvider = ({ children }) => {
const [persistedStore, setPersistedStore] = useState(store);
useEffect(() => {
const hydratedStore = new Store();
setPersistedStore(hydratedStore);
}, []);
return (
<StoreContext.Provider value={persistedStore}>
{children}
</StoreContext.Provider>
);
};
// 自定义Hook
const useStore = () => useContext(StoreContext);
// 使用示例
const Counter = () => {
const store = useStore();
return (
<div>
<h1>Count: {store.count}</h1>
<button onClick={() => store.increment()}>Increment</button>
<button onClick={() => store.decrement()}>Decrement</button>
</div>
);
};
const App = () => {
return (
<StoreProvider>
<Counter />
</StoreProvider>
);
};
export default App;
mobx-persist
配置不正确或存储引擎(如localStorage
)不可用。mobx-persist
,并检查存储引擎是否可用。mobx
的@computed
装饰器来优化计算属性,避免不必要的重新渲染。通过以上信息,你应该能够更好地理解和使用MobX与React Context结合进行持久化存储。
领取专属 10元无门槛券
手把手带您无忧上云