Как я могу использовать response-router-dom для перехода к другому маршруту на моей веб-странице?

Я учусь использовать React и столкнулся с проблемой. Я был бы признателен, если бы вы могли мне помочь. В компонент я вставил ссылку и хочу, чтобы при нажатии пользователь попадал на совершенно новую страницу (на моем собственном сайте), но мне не удалось этого добиться.

Читая и просматривая видео, я увидел, что это сделано с помощью «react-router-dom». Мне удалось заставить его работать частично, но он вставляет информацию о компоненте на мою главную страницу, и мне нужна возможность посетить этот новый маршрут или компонент на новой странице моего сайта. Другими словами, я не знаю, как визуализировать связанный компонент. Спасибо!

///Компонент, в котором находится ссылка, на которую я хочу перенаправить

import React from "react";
import { Link } from "react-router-dom";

function Skills() {
    return(
        <div id = "bioContainer">
            <h2>My Skills</h2>
                <div id = "bioText">
                    <ul className = "skills-list">
                        <li className = "frontend">HTML</li>
                        <li className = "frontend">CSS</li>
                        <li className = "frontend">React</li>
                        <li>Javascript</li>
                        <li className = "backend">Node.js</li>
                        <li>Github</li>
                        <li className = "backend">PostgreSQL</li>
                        <li>Python</li>
                    </ul>
                    <h2>"xxx</h2>
                    <h3>Who am I?</h3>
                    <p className = "about">xxx</p>
                    <Link to = "/Bio">See more</Link>
                </div>
        </div> 
    );
}

export default Skills;

/// Компонент приложения

import React from "react";
import Header from "./Header";
import Skills from "./Skills";
import Projects from "./Projects";
import Footer from "./Footer";
import Get_in_touch from "./Get_in_touch";
import Bio from "./Bio";
import {Route, Routes} from "react-router-dom";

function App() {
  return (
      <div className = "App">
          <Header />
          <Skills />
          <Routes>
            <Route path = "/bio" element = {<Bio />} />
          </Routes>
          <Projects />
          <Get_in_touch />
          <Footer />
      </div>
  );
}

export default App;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
478
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы хотите, чтобы Skills отображался на отдельной странице от Bio, создайте для него отдельный маршрут.

Пример:

function App() {
  return (
    <div className = "App">
      <Header />
      <Routes>
        <Route path = "/" element = {<Skills />} />
        <Route path = "/bio" element = {<Bio />} />
      </Routes>
      <Projects />
      <Get_in_touch />
      <Footer />
    </div>
  );
}

Вы можете сделать то же самое для Projects и Get_in_touch, если хотите, чтобы они не отображались на каждой «странице».

Привет, Дрю! Большое спасибо за помощь. Я понимаю, что в этом случае «Биография» заменяет «Навыки» на моей домашней странице (так как она у меня структурирована), но как мне скрыть другие компоненты, которые все еще видны? Они продолжают отображаться, и мне бы хотелось, чтобы при нажатии на ссылку «Посмотреть больше» отображалось только содержимое «Биографии». Еще раз спасибо за ваше время.

user24210059 11.04.2024 19:11

@user24210059 user24210059 Вы имеете в виду «скрытие» Header, Projects, Get_in_touch и Footer при переходе к "/bio"? Вы можете визуализировать все это вместе с Skills на корневом "/" маршруте или создать компонент маршрута макета, как в этом ответе. Если бы вы могли уточнить, что вы хотите, я могу обновить свой ответ.

Drew Reese 11.04.2024 19:29

На ваш вопрос уже ответил Дрю Риз:

<Routes>
   <Route path = "/skills" element = {<Skills />} />
   <Route path = "/bio" element = {<Bio />} />
</Routes>

Я пока не могу писать комментарии, поэтому напишу это как ответ. Если вы изучаете React Router, я бы порекомендовал вам использовать их документацию. Вы изучаете старый API.

https://reactrouter.com/en/main/upgrading/v6-data

Чтобы использовать текущий макет, вам необходимо переместить все, что не является маршрутом (например, заголовок), в компонент макета. Затем вы добавляете маршрут макета в качестве родительского для каждого другого маршрута.

<Routes>
   <Route element = {<Layout/>}>
       <Route path = "/skills" element = {<Skills />} />
       <Route path = "/bio" element = {<Bio />} />
   </Route>
</Routes>

В компоненте «Макет» вы добавляете все компоненты, которые всегда должны появляться вокруг содержимого вашего маршрута, затем добавляете Outlet, который будет отображать соответствующий компонент маршрута (например, «Навыки»).

Например:

function Layout() {
  return (
    <div className = "App">
      <Header />
      <Outlet />
      <Projects />
      <Get_in_touch />
      <Footer />
    </div>
  );
}

Существует вспомогательный метод для преобразования элементов Route в RouteObject, как описано здесь https://reactrouter.com/en/main/utils/create-routes-from-elements

const routes = createBrowserRouter(createRoutesFromElements(
  // Omit the wrapping <Routes> component
  <Route element = {<Layout/>}>
      <Route path = "/skills" element = {<Skills />} />
      <Route path = "/bio" element = {<Bio />} />
  </Route>
)

Затем вы передаете RouteObject в RouterProvider.

<RouterProvider routes = {routes}/>

Это то, что вы бы визуализировали в своем App.tsx вместо компонента BrowserRouter, обертывающего Routes.

Другие вопросы по теме