Мой опыт изучения React в LearnFactory был потрясающим, я создал демонстрационную веб-страницу футбольной команды со страницей регистрации и входа и пятью другими страницами. Я использовал эту веб-страницу, чтобы изучить и попрактиковаться в концепции React Router.
В этой статье я рассмотрю различные концепции response-router-dom, такие как Link, NavLink, Redirect, Route, Switch, BrowserRouter, используя в качестве примера веб-страницу.
Начало работы
Для начала давайте начнем с установки пакета response-router-dom, поэтому внутри вашего проекта React выполните следующую команду, используя свой терминал (Linux или MAC) или командную строку (Windows):
npm install --save react-router-dom
Определение понятий:
React-Router: React Router - это стандартная библиотека маршрутизации для React. Из документов:
React Router синхронизирует ваш пользовательский интерфейс (UI) с URL-адресом. Он имеет простой API с мощными функциями, такими как отложенная загрузка кода, динамическое сопоставление маршрутов и встроенная обработка перехода местоположения. Сделайте URL-адрес вашей первой мыслью, а не последствием.
React Router позволяет нам создавать одностраничное веб-приложение с навигацией без обновления страницы при навигации пользователя. React Router использует структуру компонентов для вызова компонентов, которые отображают соответствующую информацию.
Маршрутизатор или маршрутизатор браузера: это родительский компонент, который охватывает все наши компоненты Route.
Switch: компонент Switch помогает нам отображать компоненты только в том случае, если путь совпадает, в противном случае он вернется к компоненту 404 или странице ошибки.
Маршрут: помогает нам создать маршрут, доступный в определенном месте, доступном по URL-адресу.
Ссылка: используется для навигации по различным маршрутам на сайте.
NavLink: выполняет ту же функцию, что и ссылка, а также добавляет атрибуты стиля к активным маршрутам.
Путь: путь, по которому маршрут будет активен.
Перенаправление: перенаправление устанавливает перенаправление на другой маршрут в вашем приложении для поддержки старых URL-адресов.
Давайте попрактикуемся в этих концепциях.
У меня есть семь компонентов для отображения, и все они находятся в моем файле Index.js, который является тем же компонентом, который я визуализирую.
Поскольку мы уже установили response-router-dom, нам нужно импортировать его вместе с другими компонентами, которые мы будем отображать.
Перемещение по URL-адресу.
Index.js
import React, {Component} from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import './index.css'; import {Switch, Route, BrowserRouter} from 'react-router-dom'; import Login from './components/Login'; import Profile from './components/Profile'; import About from './components/About'; import Register from './components/Register'; import Comment from './components/Comment'; import Error from './Error';
На следующем шаге мы создаем наш компонент (вы можете использовать компонент с состоянием или без него). Я буду использовать компонент с отслеживанием состояния.
class Index extends Component { render() { return ( <div className="App"> <BrowserRouter> <Route path="/register" component={Register} /> <Route path="/" component={Login} /> <Route path="/home" component={App} /> <Route path="/about" component={About} /> <Route path="/profile" component={Profile} /> <Route path="/comment" component={Comment} /> </BrowserRouter> </div>) } }
В приведенном выше компоненте у нас есть BrowserRouter, обертывающий все наши маршруты.
У нас также есть наш компонент Route с двумя реквизитами: path (путь для активного маршрута) и component (компонент, который будет отображаться, когда пользователь переходит к пути)
Маршрут с путем = ”/” обычно является домашней страницей или первой страницей, которую пользователь увидит после посещения вашего сайта, в моем приложении это страница входа в систему.
Если мы перейдем сейчас, мы столкнемся с проблемой. У нас одновременно отображаются 2 или более страниц, потому что наш путь входа в систему - ’/’, а другие пути также имеют (косую черту) / перед именами путей ’, например путь к компоненту "О программе" - ‘/ about’.
S lash одинаков во всех путях, поэтому он отображает несколько компонентов, чтобы остановить это поведение, нам нужно использовать точную опору в пути входа.
Итак, мы бы изменили наш путь входа в систему следующим образом:
<Route exact path="/" component={Login} />
Итак, наше приложение работает правильно.
Следующим шагом нам нужно создать страницу 404 или страницу с ошибкой, которая будет отображаться в случае, если наши пользователи перейдут по неправильному пути, отсутствующему на нашем веб-сайте.
Я уже создал страницу с ошибкой и импортировал ее. Я бы сейчас добавил маршрут на страницу с ошибкой. Чтобы создать маршрут к 404-й странице или странице с ошибкой, см. Формат ниже:
<Route component={Error} />
Теперь приступим к навигации, у нас снова ошибка. На любой странице, на которую мы переходим, также отображается страница с ошибкой.
Мы можем исправить это, обернув наши компоненты Route в компонент Switch.
Компонент Switch будет внутри нашего компонента BrowserRouter.
Теперь у нас должно получиться что-то вроде этого.
class Index extends Component { render() { return( <div className="App"> <BrowserRouter> <Switch> <Route path="/register" component={Register} /> <Route exact path="/" component={Login} /> <Route path="/home" component={App} /> <Route path="/about" component={About} /> <Route path="/profile" component={Profile} /> <Route path="/comment" component={Comment} /> <Route component={Error} /> </Switch> </BrowserRouter> </div>) } }
Теперь наше приложение перемещается правильно, и мы добавили все отображаемые компоненты.
Наконец, нам нужно, чтобы пользователи нашего сайта могли легко перемещаться по различным страницам нашего сайта, нажимая на ссылки / навигационные ссылки или кнопки.
У меня уже есть NavLinks (для перехода к различным компонентам на сайте), отображаемые в моем заголовке, и ссылка на моей странице ошибки (для перенаправления пользователя обратно на домашнюю страницу).
Link и NavLink переводят опору в "" путь, уже определенный в нашем Index.js внутри нашего компонента BrowserRouter.
<Link className='error' to="/home">Go back to home page</Link> <NavLink to="/home" className="appy" activeClassName="active" style={{ textDecoration: 'none' }}> <li>HOME</li> </NavLink> <NavLink to="/about" className="appy" activeClassName="active" style={{ textDecoration: 'none' }}> <li>ABOUT</li> </NavLink>
Еще одна вещь, помните, мы используем NavLinks для добавления атрибутов стиля на активных маршрутах. Поэтому я хочу, чтобы цвет фона NavLink страницы, на которой я нахожусь, был черным.
На картинке ниже показано, чего я хочу достичь:
Чтобы добиться этого, я бы применил свой стиль к activeClassName (который назван «active», как указано выше), а не к className.
.active { background: black; }
Теперь мы можем перемещаться по сайту, и все работает нормально.
Примечание: в проекте есть страница регистрации и входа, и вам нужно будет создать учетную запись, а затем войти в систему, чтобы получить доступ к домашней странице по ссылке ниже. Буду признателен за ваши комментарии к проекту.
Https://landingpage.danekehu.now.sh
Пожалуйста, посмотрите ниже ссылку на мой репозиторий на git hub:
Https://github.com/Ubanna/Landing_page_react
Спасибо.