我用维生素E创建了一款react 应用程序.

这是我的App.jsx

import './styles.css'
import { BrowserRouter, Routes, Route } from 'react-router-dom'
import Home from './components/Home'
import About from './components/pages/About'
import Resume from './components/pages/Resume'
import Work from './components/pages/Work'
import Contact from './components/pages/Contact'
function App() {
  return (
    <>
    <BrowserRouter>

        <Routes>
          <Route path='/' element={<Home/>}>
            <Route path='about' element={About}></Route>
            <Route path='resume' element={Resume}></Route>
            <Route path='work' element={Work}></Route>
            <Route path='contact' element={Contact}></Route>
          </Route>
        </Routes>

    </BrowserRouter>
     
    </>
  )
}

export default App

这是我的家.jsx

import NavBar from "./pages/NavBar";
import Header from "./pages/Header";
import { Outlet, useNavigate } from "react-router-dom";
import Profile from "./pages/Profile";
// import About from "./pages/About";
// import Resume from "./pages/Resume";
import Contact from "./pages/Contact";
import { useEffect } from "react";

function Home() {
  const navigate = useNavigate();
  useEffect(() => {
    navigate("/about");
  }, []);
  return (
    <>
      <Header></Header>
      <div className="d-flex1 gap-3">
        <Profile></Profile>
        <div className="w-100">
          <div className=" navbar d-flex justify-content-end">
            <NavBar></NavBar>
          </div>
          <Outlet />
          {/* <Resume></Resume> */}
          {/* <About></About> */}
          <Contact></Contact>
        </div>
      </div>
    </>
  );
}

export default Home;

This is my package.json enter image description here

这是我的NabBar.jsx

import * as Lucide from "lucide-react";
import { NavLink, useLocation } from "react-router-dom";
function NavBar() {
  const location = useLocation();

  const activeLink = location.pathname.split("/").pop();

  return (
    <>
      <div>
        <div className="d-flex gap-3 card-effect mt-3 ">
          <NavLink
            to="/about"
            className={`icon  ${activeLink === "home" ? "active" : null}`}
          >
            <Lucide.HomeIcon></Lucide.HomeIcon>
            <p>Home</p>
          </NavLink>
          <NavLink
            to="/resume"
            className={`icon  ${activeLink === "resume" ? "active" : null}`}
          >
            <Lucide.FileTextIcon></Lucide.FileTextIcon>
            <p>Resume</p>
          </NavLink>
          <NavLink
            to="/work"
            className={`icon  ${activeLink === "work" ? "active" : null}`}
          >
            <Lucide.BriefcaseIcon></Lucide.BriefcaseIcon>
            <p>Work</p>
          </NavLink>
          <NavLink
            to="/contact"
            className={`icon  ${activeLink === "contact" ? "active" : null}`}
          >
            <Lucide.ContactIcon></Lucide.ContactIcon>
            <p>Contact</p>
          </NavLink>
        </div>
      </div>
    </>
  );
}

export default NavBar;

现在,当我试图导航到http://localhost:5173/about时,about组件没有呈现.我已经判断了多个在线来源的解决方案,但我找不到任何.同样的实现在我的另一个项目中也是有效的,在那里这个项目是使用repeat-react-app创建的.

推荐答案

About组件(and other routed components)不会渲染,因为它没有正确传递给elementprops ,即ReactNode,也就是.作为JSX.应该是element={<About />},而不是element={About}.

<Routes>
  <Route path="/" element={<Home />}>
    <Route path="about" element={<About />} />
    <Route path="resume" element={<Resume />} />
    <Route path="work" element={<Work />} />
    <Route path="contact" element={<Contact />} />
  </Route>
</Routes>

其他建议:

默认情况下,NavLink组件应用"active" CSS类名,因此不需要使用useLocation钩子并手动重新计算匹配/活动链接,NavLink组件已经知道如何做到这一点.

function NavBar() {
  return (
    <div>
      <div className="d-flex gap-3 card-effect mt-3 ">
        <NavLink to="/about" className="icon">
          <Lucide.HomeIcon />
          <p>Home</p>
        </NavLink>
        <NavLink to="/resume" className="icon">
          <Lucide.FileTextIcon />
          <p>Resume</p>
        </NavLink>
        <NavLink to="/work" className="icon">
          <Lucide.BriefcaseIcon />
          <p>Work</p>
        </NavLink>
        <NavLink to="/contact" className="icon">
          <Lucide.ContactIcon />
          <p>Contact</p>
        </NavLink>
      </div>
    </div>
  );
}
.icon {
  // link rules here
}
.icon.active {
  // active link rules here
}

Edit is-this-correct-configuration-of-react-app-using-vite

但是,如果您想提供different个活动的css类名,那么推荐的模式是使用classname callback syntax并访问传递的isActive属性.

例如:

<NavLink
  to="/about"
  className={({ isActive }) =>
    ["icon", isActive ? "customClassname" : ""].join(" ")
  }
>
  <Lucide.HomeIcon />
  <p>Home</p>
</NavLink>

Reactjs相关问答推荐

Redux向后端发送请求时出现钩子问题

是否将样式应用于父悬停(框架运动)上的子元素?

无法从正在使用Reaction的Electron 商务store 项目中的购物车中删除项目

React Context未正确更新

MUiv5和TSS-Reaction SSR问题:无法可靠地处理样式定义.CSSprops 中的ArrowFunctionExpression

React-React中是否完全支持基于类的组件?

使用experial_useFormState将参数传递给服务器操作

Next.js `getLayout` 函数没有被调用

如何在 ChartJS 中创建此图表?在 NEXTjs 和 TSX 中

无法在react 中向表中添加行

运行 npm run build 出现问题

如何在 ReactJS 中提交后删除 URL 中的查询参数

null 不是对象(判断RNSound.IsAndroid)

将复杂状态和 setState 传递给更简单的 api

使用 react-router-dom 时弹出空白页面

getAttribute 函数并不总是检索属性值

如果查询不存在,如何返回所有产品?

在视图列表上react 本机无限循环的反弹动画?

NextJs - 如何从站点 map 生成器中删除重复的 URL?

如何从另一个切片中的不同切片获取状态并对其进行处理?