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

react-router-dom中Routes与Route使用报错:[Login]不是有效组件

问题原因

你遇到的错误核心是react-router-dom v6 彻底改变了 <Route> 组件的用法——它不再支持将组件直接作为 <Route> 的子元素,必须通过 element 属性来指定要渲染的内容。你的代码里把 <Login>、<Homepage> 直接嵌套在 <Route> 标签内部,这是 v5 及更早版本的写法,v6 不兼容这种方式,所以触发了错误提示。

修复方案

把所有 <Route> 的子组件都移到 element 属性中,根路径的条件渲染逻辑也可以直接写在 element 的表达式里:

import './App.css';
import Homepage from './components/Homepage/Homepage';
import Login from './components/Login/Login';
import Register from './components/Register/Register';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { useState } from 'react';

export const App = () => {
  const [user, setLoginUser] = useState({});
  return (
    <BrowserRouter>
      <div className='App'>
        <Routes>
          <Route 
            path='/' 
            element={
              // 用可选链简化判断,避免空值报错
              user?._id ? <Homepage setLoginUser={setLoginUser} /> : <Login setLoginUser={setLoginUser}/>
            } 
          />
          <Route path='/login' element={<Login setLoginUser={setLoginUser}/>} />
          <Route path='/register' element={<Register />} />
        </Routes>
      </div>
   </BrowserRouter>
  );
};
额外说明
  • v6 中 <Route> 的 exact 属性已经被移除,因为默认就会精确匹配路径,不需要手动添加
  • 使用 user?._id 代替 user && user._id 是更安全的写法,即使 user 是 null 或 undefined 也不会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:50:21