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

React路由点击时在父组件中条件渲染子组件的实现问题

解决React路由切换时父组件内条件渲染子组件的问题

针对你从Vue转React后遇到的路由切换时父组件内指定区域渲染对应子组件的需求,这里提供两种实用方案:

方案一:通过useLocation钩子判断路径渲染

利用React Router的useLocation获取当前路由路径,再通过条件判断或对象映射渲染对应子组件,适合需要在渲染前做额外逻辑处理的场景。

import { useLocation, Link } from 'react-router-dom';
import ChildComponent1 from './ChildComponent1';
import ChildComponent2 from './ChildComponent2';

// 假设你的菜单数组
const menuItems = [
  { name: '子组件1', path: '/child1' },
  { name: '子组件2', path: '/child2' }
];

function WrapperComp() {
  const { pathname } = useLocation();

  // 方式1:if-else 条件判断(适合少量组件)
  let currentChild;
  if (pathname === '/child1') {
    currentChild = <ChildComponent1 />;
  } else if (pathname === '/child2') {
    currentChild = <ChildComponent2 />;
  } else {
    currentChild = <div>请选择有效菜单选项</div>;
  }

  // 方式2:对象映射(适合多组件场景,更简洁)
  // const componentMap = {
  //   '/child1': <ChildComponent1 />,
  //   '/child2': <ChildComponent2 />
  // };
  // const currentChild = componentMap[pathname] || <div>请选择有效菜单选项</div>;

  return (
    <div className="wrapper">
      {/* 导航菜单区域 */}
      <nav>
        {menuItems.map(item => (
          <Link key={item.path} to={item.path}>{item.name}</Link>
        ))}
      </nav>

      {/* 指定的条件渲染区域 */}
      <div className="content-container">
        {currentChild}
      </div>
    </div>
  );
}

export default WrapperComp;

方案二:用Route组件直接在指定区域匹配渲染

这是React Router原生推荐的方式,无需手动判断路径,直接在目标区域通过Routes和Route匹配路由并渲染组件,逻辑更清晰。

import { Routes, Route, Link } from 'react-router-dom';
import ChildComponent1 from './ChildComponent1';
import ChildComponent2 from './ChildComponent2';

const menuItems = [
  { name: '子组件1', path: '/child1' },
  { name: '子组件2', path: '/child2' }
];

function WrapperComp() {
  return (
    <div className="wrapper">
      {/* 导航菜单区域 */}
      <nav>
        {menuItems.map(item => (
          <Link key={item.path} to={item.path}>{item.name}</Link>
        ))}
      </nav>

      {/* 指定的条件渲染区域 */}
      <div className="content-container">
        <Routes>
          <Route path="/child1" element={<ChildComponent1 />} />
          <Route path="/child2" element={<ChildComponent2 />} />
          <Route path="/" element={<div>请选择菜单选项</div>} />
        </Routes>
      </div>
    </div>
  );
}

export default WrapperComp;

注意事项

  • 确保项目外层已经包裹了BrowserRouter(通常在根组件如App.jsx中),否则路由相关钩子和组件无法正常工作:
import { BrowserRouter } from 'react-router-dom';
import WrapperComp from './WrapperComp';

function App() {
  return (
    <BrowserRouter>
      <WrapperComp />
    </BrowserRouter>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:15:35