我试图在Next.js项目中保存localStorage
中的上下文,但在刷新页面时出现水合错误.
我怎么才能解决这个问题呢?
type AppState = {
name: string;
salary: number;
info: {
email: string;
department: string;
};
};
interface Props {
children: ReactNode;
}
const initialState: AppState = {
name: "osamu1908",
salary: 2000,
info: {
email: "dynamic@gmail.com",
department: "software developer",
},
};
export const AppState = createContext<AppState>(initialState);
export const AppStateSet = createContext<Dispatch<SetStateAction<AppState>>>(
() => {}
);
const initalFromLocalStorage = () => {
if (typeof window !== "undefined") {
const result = localStorage.getItem("state");
if (result) {
return JSON.parse(result) as AppState;
}
}
return initialState;
};
const AppStateProvider = ({ children }: Props) => {
const [state, setState] = useState<AppState>(initalFromLocalStorage());
useEffect(() => {
localStorage.setItem("state", JSON.stringify(state));
}, [state]);
return (
<AppState.Provider value={state}>
<AppStateSet.Provider value={setState}>{children}</AppStateSet.Provider>
</AppState.Provider>
);
};
export default AppStateProvider;