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

React嵌套路由访问/employee/create同时显示列表和表单如何解决

问题原因

React Router 默认采用包容性匹配规则,未加独占匹配包裹时,所有匹配到路径规则的路由组件都会同时渲染。你当前代码缺少路由独占匹配的逻辑,导致访问/employee/create时触发了多个组件渲染。

解决方案

方案1:适配React Router v5版本

用<Switch>组件包裹所有路由,<Switch>会保证仅渲染第一个匹配到的路由组件。
首先在文件头部引入Switch组件:

import { Switch, Route } from 'react-router-dom';

修改render内的代码如下:

render() {
    return (
        <Layout>
            <Switch>
                <Route exact path='/' component={Home} />
                <Route path='/counter' component={Counter} />
                <AuthorizeRoute path='/fetch-data' component={FetchData} />
                <Route exact path='/employee' component={EmployeeIndex} />
                <Route path='/employee/create' component={EmployeeCreate} />
                <Route path='/employee/details/:id' component={EmployeeDetails} />
            </Switch>
        </Layout>
    );
 }

注意路由排列顺序,更具体的路径(如/employee/create)要放在相对模糊的路径(如带参数的/employee/:id)前面,避免先匹配到模糊规则跳过精确规则。

方案2:适配React Router v6版本

v6版本废弃了Switch组件,替换为<Routes>,且默认开启精确匹配,写法调整如下:
首先引入相关组件:

import { Routes, Route } from 'react-router-dom';

修改路由代码:

render() {
    return (
        <Layout>
            <Routes>
                <Route path='/' element={<Home />} />
                <Route path='/counter' element={<Counter />} />
                <AuthorizeRoute path='/fetch-data' element={<FetchData />} />
                <Route path='/employee' element={<EmployeeIndex />} />
                <Route path='/employee/create' element={<EmployeeCreate />} />
                <Route path='/employee/details/:id' element={<EmployeeDetails />} />
            </Routes>
        </Layout>
    );
 }

调整后访问/employee/create就只会渲染员工创建表单组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:12:00