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

如何解决Next.js 14集成Redux Toolkit的Provider包裹错误?

Next.js 14 集成Redux Provider 解决"找不到react-redux上下文"报错

针对你遇到的Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>报错,结合Next.js 14 App Router的特性,排查以下几个关键问题:


1. 确认根布局全局包裹StoreProvider

Next.js 14的App Router中,必须在**根app/layout.tsx**里用StoreProvider包裹所有子组件,而非仅在page.tsx中局部包裹:

// app/layout.tsx
import StoreProvider from './StoreProvider'

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>
        <StoreProvider>{children}</StoreProvider>
      </body>
    </html>
  )
}

2. 检查StoreProvider的客户端标记

Redux的Provider属于客户端逻辑,必须在StoreProvider.tsx顶部添加'use client'指令,否则会因服务器组件无法处理上下文而报错:

// app/StoreProvider.tsx
'use client'
import { Provider } from 'react-redux'
import { store } from '@/lib/store'

export default function StoreProvider({
  children,
}: {
  children: React.ReactNode
}) {
  return <Provider store={store}>{children}</Provider>
}

3. 给Counter组件添加客户端标记

useAppSelector是React Hook,只能在客户端组件中使用,必须在Counter.tsx顶部添加'use client':

// features/counter/Counter.tsx
'use client'
import { useAppSelector, useAppDispatch } from '@/lib/hooks'
import { increment, decrement } from './counterSlice'
import { selectCount } from './counterSlice'

export default function Counter() {
  const count = useAppSelector(selectCount)
  const dispatch = useAppDispatch()

  return (
    <div>
      <button onClick={() => dispatch(decrement())}>-</button>
      <span>{count}</span>
      <button onClick={() => dispatch(increment())}>+</button>
    </div>
  )
}

4. 验证hooks与store的类型匹配

确保lib/hooks.ts的类型定义与store.ts导出的类型完全一致:

// lib/hooks.ts
import { useDispatch, useSelector } from 'react-redux'
import type { AppDispatch, RootState } from './store'

export const useAppDispatch = useDispatch.withTypes<AppDispatch>()
export const useAppSelector = useSelector.withTypes<RootState>()
// lib/store.ts
import { configureStore } from '@reduxjs/toolkit'
import counterReducer from '@/features/counter/counterSlice'

export const store = configureStore({
  reducer: {
    counter: counterReducer,
  },
})

export type RootState = ReturnType<typeof store.getState>
export type AppDispatch = typeof store.dispatch

以上几点是Next.js 14集成Redux最容易踩的坑,尤其是App Router的服务器/客户端组件区分规则,只要按上述步骤调整,基本可以解决上下文找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:16