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

如何在React Router中正确结合Context使用?

React Router 与 Context 结合使用的问题

我会使用Routes,也会使用Context,但不知道如何将二者结合使用。

初始的Routes代码如下:

function App() {
    return (
        <Routes>
                <Route path="/" element={<div/>} />
        </Routes>
    )
}

我尝试用Context的Provider包裹Route,写法如下:

export const Context = createContext(7)

function App() {
    return (
        <Routes>
            <Context.Provider value={7}>
                <Route path="/" element={<div/>} />
            </Context.Provider>
        </Routes>
    )
}

此时出现错误:

Error: [undefined] is not a <Route> component. 
All component children of <Routes> must be a <Route> or <React.Fragment>

解决办法

方法一:全局包裹(所有路由组件共享Context)

把Context.Provider直接包裹在<Routes>外层,这样所有路由下的组件都能访问到这个Context:

export const Context = createContext(7)

function App() {
    return (
        <Context.Provider value={7}>
            <Routes>
                <Route path="/" element={<div/>} />
            </Routes>
        </Context.Provider>
    )
}

方法二:局部包裹(仅特定路由组件使用Context)

如果只需要给某一个路由对应的组件提供Context,可以把Provider放到该路由的element属性对应的组件内部:

export const Context = createContext(7)

// 封装带Context的页面组件
const HomePage = () => {
    return (
        <Context.Provider value={7}>
            <div>首页内容</div>
        </Context.Provider>
    )
}

function App() {
    return (
        <Routes>
            <Route path="/" element={<HomePage />} />
        </Routes>
    )
}

错误原因说明

<Routes>组件要求它的直接子元素只能是<Route>或者<React.Fragment>,你之前把Context.Provider直接作为<Routes>的子元素,违反了这个规则,所以触发了报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:37:05