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

React.js中Route组件内元素无法加载问题求助

React Router v6 组件加载问题解决

关于新版本是否必须用Routes包裹Route

  • 没错,react-router-dom v6及以后的版本必须用<Routes>组件包裹所有<Route>,它替代了旧版的<Switch>组件,负责管理路由匹配逻辑,确保只有第一个匹配的路由被渲染。

组件不加载的问题原因及修复

你的问题出在<Route>的element属性写法上:v6版本中,element需要直接传入JSX元素,而不是返回JSX的箭头函数。你当前写的element={() => (...)}会导致React无法正确识别并渲染内部组件,只要去掉箭头函数,直接传递JSX即可。

修改后的核心代码片段

<Routes>
  {/* 直接传递JSX元素,去掉外层的箭头函数 */}
  <Route path='/' element={
    <>
      <AddTask addTask_atr={handleTaskAddition}/>
      <Tasks_comp task_rmv_click={handleRemoveClick} tasks_atr={tasks_var} task_arg_click={handleTaskClick}/>
    </>
  } />
</Routes>

完整修改后的App.js代码

import React, { useState } from 'react';
import {v4 as uuidv4}      from "uuid";
import {BrowserRouter as Router, Route, Routes} from "react-router-dom"

import "./App.css";

import Tasks_comp from "./components/Tasks";
import AddTask    from './components/AddTask';
import Header     from './components/Header';

const App = () => {
  const [tasks_var, setTasks] = useState([
    {
      id: "1",
      title: "study",
      completed: false,
    },
    {
      id: "2",
      title: "read",
      completed: true,
    }
  ]);

  const handleTaskClick = (taskId) => {
    const newTasks = tasks_var.map((cada_task) =>{
      if (cada_task.id === taskId){
        return {...cada_task, completed: ! cada_task.completed}
      }
      else{
        return cada_task;
      };
    });
    setTasks(newTasks);
  }

  const handleRemoveClick = (taskId) => {
    const newTasks = tasks_var.filter(function(obj) {
      return obj.id !== taskId
    })
    //também possível fazer com método splice. pesquisar
    setTasks(newTasks);
  }

  const handleTaskAddition = (taskTitle) => {
    const newTasks = [...tasks_var, {  //dica abaixo
      title: taskTitle,
      id: uuidv4(), //valor aleatório
      completed: false,
    }]; // equivalente ao push

    setTasks(newTasks);
  }

  return (
    <Router>
      <div id='my_div' className="container">
        <Header/>
        <Routes>
          <Route path='/' element={
            <>
              <AddTask addTask_atr={handleTaskAddition}/>
              <Tasks_comp task_rmv_click={handleRemoveClick} tasks_atr={tasks_var} task_arg_click={handleTaskClick}/>
            </>
          } />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

内容的提问来源于stack exchange,提问作者João Pedro Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:45:33