You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中如何结合Redux Toolkit与Material UI Theme Provider实现明暗模式

解决Next.js中Redux Provider与ThemeProvider的包裹顺序问题

你遇到的错误根源是:当前代码把Redux的Provider放在ThemeProvider内部,而ThemeProvider或它的子组件(比如CssBaseline)需要访问Redux上下文,但这些组件不在Redux的上下文覆盖范围内,所以抛出找不到react-redux context的报错。

正确的处理方式是把Redux的Provider放在最外层,让ThemeProvider及其所有子组件都处于Redux的上下文环境中,这样所有需要访问Redux状态的组件都能正常获取上下文。

修正后的代码示例

import { Provider, useSelector } from 'react-redux';
import { ThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
import store from '../redux/store'; // 替换成你的store实际路径

function MyApp({ Component, pageProps }) {
  // 从Redux store中获取主题状态(假设你的theme slice里有currentTheme字段)
  const theme = useSelector(state => state.theme.currentTheme);

  return (
    <Provider store={store}>
      <ThemeProvider theme={theme}>
        <CssBaseline />
        <Component {...pageProps} />
      </ThemeProvider>
    </Provider>
  );
}

export default MyApp;

关键说明

  • 确保theme的值从Redux store中动态获取,这样当你通过Redux修改明暗模式状态时,ThemeProvider能自动同步更新主题。
  • 调整顺序后,所有依赖Redux的组件(包括ThemeProvider内部的组件)都能正常访问Redux上下文,不会再出现找不到context的错误。

内容的提问来源于stack exchange,提问作者Prasan Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:15:16