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

Next.js Context API页面切换时丢失状态问题排查

问题解决:Next.js路由切换时Context状态丢失

问题原因

你遇到的问题核心是Context Provider的挂载范围不对。当前你只在Index页面里用Provider包裹了PageA,而PageB作为独立路由页面,它的组件树并没有被同一个Provider覆盖。当通过Link或router.push切换到PageB时,Next.js会重新渲染新页面的组件树,此时PageB会创建一个全新的Context实例,自然丢失之前的状态。

解决方案

把Context Provider提升到Next.js的全局根组件_app.js(或_app.tsx)中,这是Next.js全局共享状态的标准实现方式,所有页面都会共享同一个Context实例,路由切换时Provider不会重新挂载,状态得以保留。

修改后的代码示例

  1. 更新_app.js:
import Context from '../components/context'
import '../styles/globals.css'

function MyApp({ Component, pageProps }) {
  return (
    <Context>
      <Component {...pageProps} />
    </Context>
  )
}

export default MyApp
  1. 简化原入口页面(比如pages/index.js):
import PageA from '../components/pageA'

const Index = () => {
  return <PageA />
}

export default Index

这样修改后,无论是PageA还是PageB,都会处于同一个Context Provider之下,点击按钮更新count后,跳转到PageB就能看到正确的状态值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:57:42