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

如何在App.tsx属性变化时通知_app.js更新暗黑模式主题

问题根因

你当前方案失效的核心原因违反了React Context的消费规则:useContext 只能消费当前组件父级链上的对应Provider提供的值。你在MyApp组件内部调用useContext(MyContext),而MyApp本身才是这个Context的Provider返回者,当前组件外层没有对应的Provider,所以你拿到的myContext永远是Context的默认初始值,自然不会响应子树内的Context值变化。


解决方案

根据你的实际场景选择对应方案即可:

场景1:需要监听的darkMode是MyApp入参someProps传入的

直接监听props变化即可,不需要绕Context:

function MyApp({ Component, pageProps, someProps }) {
  React.useEffect(() => {
    alert('helloworld');
    // 在此处执行你需要的状态更新逻辑
  }, [someProps.darkMode]); // 直接监听props里的暗黑模式属性

  return (
    <MyContext.Provider value={someProps}>
      <Component {...pageProps} />
    </MyContext.Provider>
  );
}

export default MyApp;

场景2:需要监听子组件(如你提到的App.tsx)修改的暗黑模式值

你需要把暗黑模式的状态定义在_app.js内部,子组件通过Context修改这个状态,你直接监听内部状态变化即可:

function MyApp({ Component, pageProps }) {
  // 暗黑模式状态定义在_app层
  const [darkMode, setDarkMode] = React.useState(false);

  // 监听内部状态变化
  React.useEffect(() => {
    alert('helloworld');
    // 在此处执行你需要的状态更新逻辑
  }, [darkMode]);

  // 把状态和修改方法透传给Context,子组件可调用setDarkMode修改暗黑模式
  return (
    <MyContext.Provider value={{ darkMode, setDarkMode }}>
      <Component {...pageProps} />
    </MyContext.Provider>
  );
}

export default MyApp;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:05