Автор оригинала: FreeCodeCamp Community Member.
Надер Дабит
Или что я хотел бы знать, когда начиная с React Router.
React Router – это стандартная библиотека маршрутизации для реагирования. Из документов:
Шаг 1. Начиная
Начать, вы можете либо клонировать стартовый репо И перейти к тому, чтобы шаг два или выполните следующие шаги и настройте свой проект вручную.
Ручная настройка
Во-первых, давайте принесем нашу среду, созданную с помощью реагирования, бабела и веб-папака. Сначала создайте папку и компакт-диск в нее. Затем запустите NPM init -y:
npm init -y
- – Я просто отвечает да всем вопросам
Далее установите React, React-Reacter и React-DOM и сохраните их в качестве зависимостей:
npm i react react-dom react-router@2.0.1 --save
Далее установите наши зависимости Dev. Это будет WebPack, WebPack-Dev-Server, Babel-Core, Babel-Loader, Babel-Preset-ES2015 и Babel-Preset-React
npm i webpack webpack-dev-server babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev
Теперь давайте создадим файлы конфигурации для WebPack и Babel:
touch .babelrc webpack.config.js
Далее давайте создадим папку для нашего кода. Мы назовем это приложение для папки:
mkdir app
В каталоге приложения Создайте три файла: index.html app.js main.js
cd apptouch index.html app.js main.js
Наша структура файлов теперь должна выглядеть так:
Теперь откройте файл .babelrc и добавьте предустановки для реагирования и ES2015:
{ "presets": [ "es2015", "react" ]}
В WebPack.config.js добавьте следующую конфигурацию, чтобы начать нас:
module.exports = { entry: './app/main.js', output: { path: './app', filename: 'bundle.js' }, devServer: { inline: true, contentBase: './app', port: 8100 }, module: { loaders: [ { test: /\.js$/, exclude: /node_modules/, loader: 'babel' } ] }}
Теперь, когда WebPack и Babel установлены. Давайте создадим ярлык для WebPack-Dev-Server. Откройте Package.json и вставьте следующий скрипт в клавише «Сценарии»:
"scripts": { "start": "webpack-dev-server"}
Теперь мы можем просто запустить NPM начать начать наш проект.
Давайте теперь настроим наш HTML и реагируйте. Откройте index.html и создайте базовую HTML-страницу. Затем добавьте div с идентификатором root, а сценарийный тег ссылается sundle.js:
React Router
Теперь давайте пойдем в нашу main.js и настроив точку входа для нашего приложения. Введите это в ваш файл main.js:
import React from 'react'import ReactDOM from 'react-dom'import App from './app'ReactDOM.render(, document.getElementById('root'))
Теперь давайте отправимся в App.js и создайте наш компонент приложения. Откройте app.js и введите следующее:
import React, { Component } from 'react'import { Router, Route, Link, IndexRoute, hashHistory, browserHistory } from 'react-router'
const App = () =>Hello World!
export default App
Мы не используем компонент или любой из компонентов маршрутизатора/реагирования, но мы приводим их, чтобы мы могли начать на шаге.
Теперь, если вы запустите проект и перейдите к http://localhost: 8100/ Вы должны получить «Hello World !!!!!!» На вашем экране:
npm start
Шаг 2. Основная маршрутизация
Давайте создадим базовый маршрут. Мы заменим компонент приложений с помощью класса React, который вернет компонент маршрутизатора. Маршрутизатор обернет все маршруты, которые мы собираемся определить.
Каждый маршрут будет идентифицирован в компоненте <маршруте>. Компонент <маршрута> примет два свойства: путь и компонент. Когда путь соответствует пути, приведенному к компоненту <маршрута>, он вернет указанный компонент.
В App.js Refactor компонент приложения выглядит так:
import React, { Component } from 'react'import { Router, Route, Link, IndexRoute, hashHistory, browserHistory } from 'react-router'
class App extends Component { render() { return () }}
const Home = () =>Hello from Home!
const Address = () =>We are located at 555 Jackson St.
export default App
Теперь, если вы перейдите к http://localhost: 8100/ Вы должны увидеть наш домашний компонент, и если вы перейдите к http://localhost: 8100/#/адрес Вы должны увидеть наш адресный компонент.
После этого в вашей адресной строке вы заметите, что в вашей адресной строке есть случайные строки:
Если вы хотите, чтобы вы хотели бы более чистый адрес, или вы используете это в производстве, вы можете посмотреть в браустреристорию VS Hashhistory. При использовании BrowserHistory у вас должен быть сервер, который всегда будет возвращать свой сервер на любой маршрут, например, если использовать Nodejs, конфигурацию, как следующее (из документов), будет работать:
const express = require('express')const path = require('path')const port = process.env.PORT || 8080const app = express()// serve static assets normallyapp.use(express.static(__dirname + '/public'))// handle every other route with index.html, which will contain// a script tag to your application's JavaScript file(s).app.get('*', function (request, response){ response.sendFile(path.resolve(__dirname, 'public', 'index.html'))})app.listen(port)console.log("server started on port " + port)
Чтобы узнать больше о браустреристории, проверить эта ссылка.
Для остальной части этого учебника мы будем использовать Hashhistory.
Шаг 3. 404 маршрута
Теперь, что произойдет, если мы ударим маршрут, который не определен? Давайте настроим 404 маршрута и компонент, который вернется, если маршрут не найден:
const NotFound = () => (404.. This page is not found!
)
Теперь ниже Наш маршрут «/адрес», создать следующий маршрут:
Теперь, если мы ориентируемся на несколько маршрутов, который не был определен ( http://localhost: 8100/#/asdfasdf ), мы должны увидеть наш 404 маршрута.
Шаг 4. Indexroute и ссылки
Теперь давайте добавим навигацию, чтобы получить нас между страницами.
Для этого мы будем использовать компонент . аналогична с использованием файла HTML-привязки.
Из документов:
Для этого давайте сначала создадим компонент NAV. Наш NAV компонент будет содержать компоненты и будет выглядеть так:
const Nav = () => (Home Address)
Теперь нам нужен способ сделать наш NAV-компонент постоянным по всем страницам. Для этого мы обернуем наши детские маршруты в основной компонент <маршрут>. Нам также нужно будет обновить наш домашний компонент и создать новый компонент под названием контейнер:
Контейнер:
const Container = (props) =>{props.children}
{roppsshildren}
Позвольте любым маршрутам, завернутым в этот маршрут, чтобы оказаться в этом компоненте.
Теперь давайте переписам наш компонент приложения, чтобы выглядеть так. Мы обертываем нашу домашнюю страницу, адрес и неверные маршруты в новом маршруте контейнеров. Мы также устанавливаем домашнюю страницу, чтобы быть нашим индексом. Это означает, что когда мы ударили http://localhost:8100 Наш домашний компонент оказывает, как указано в качестве индекса:
class App extends Component { render () { return () }}
Для справки наш полный код App.js должен выглядеть как это Отказ
Теперь, когда мы ориентируемся на http://localhost: 8100 , мы должны увидеть наш домашний компонент, представленный наряду с нашими компонентами NAV !
Шаг 5. Множественный ребенок/indexroutes
Теперь, скажем, мы хотим гнездить в Twitter Feed и подачу Instagram в нашем адресном компоненте. Давайте создадим эту функциональность.
Во-первых, давайте переписам наш адрес маршрута, чтобы взять два новых компонента: InstagramFeed и TwitterFeed:
class App extends Component { render () { return () }}
Мы установили INDEXROUTE адрес в TwitterFeed, и добавил там маршрут Instagram.
Теперь давайте создадим наши компоненты Instagramfeed и Twitterfeed. Они будут очень простой, чтобы мы знали, что мы ударили правильные маршруты:
const Instagram = () =>Instagram Feed
const TwitterFeed = () =>Twitter Feed
Наконец, перейдите в адресный компонент и добавьте ссылки на новые компоненты, а также одобрения, поэтому компоненты будут отображаться:
const Address = (props) =>
Twitter Feed Instagram FeedWe are located at 555 Jackson St.
{props.children}
Теперь, когда мы ориентируемся на http://localhost: 8100/#/адрес Адрес-компонент должен быть представлен, а также компонент TwitterFeed:
Для справки, код до сих пор должен выглядеть как это Отказ
Шаг 6. ActiveStyle/ActiveClassname и indexlink
Теперь мы посмотрим, как стиль на ссылку на основе того, активен ли маршрут. Существует два основных способа сделать это либо добавлять стиль напрямую или через класс.
Из документов:
Во-первых, давайте посмотрим на ActiveStyle. Чтобы применить ActiveStyle, вы просто добавляете ActiveStyle в качестве свойства и пройти в стиле, который вы хотели бы, чтобы иметь:
Home
Давайте обновим наш NAV компонент для реализации этого:
const Nav = () => (Home Address About)
Теперь давайте посмотрим на то, как это выглядит в нашем браузере. Вы можете заметить, что когда вы нажимаете на адрес, этот дом все еще выделен:
Это потому, что при использовании наряду с ActiveStyle, будет активным, если текущий маршрут либо L чернил маршрут или любой потомк л чернил маршрут.
Это означает, что поскольку адрес является потомком дома, он остается подсвечиваться. Чтобы исправить это, мы сможем пройти свойство And ActimateOnindex на нашу ссылочную компонент:
Home
Теперь, когда мы смотрим на наш браузер, ссылка будет выделена только в том случае, если мы находимся на точной ссылке:
Существует также составляющая брата называется
Из документов:
Чтобы реализовать это, сначала принесите
import { ..., IndexLink } from 'react-router'
Теперь просто замените компоненты Nav с
const Nav = () => ()Home Address About
Теперь, как насчет добавления классов против стилей? Для этого мы можем использовать ActiveClassname. Давайте создадим активный стиль в нашем index.html:
Теперь мы заменим ActiveStyle с ActiveClassname в нашем компоненте NAV:
const Nav = () => ()Home Address About
Для справки наш код теперь должен выглядеть как это Отказ
Шаг 7. Названные компоненты
Используя именованные компоненты, мы можем указать компонент в качестве реквизита для <маршрута>.
Из документов:
Давайте теперь копаемся в код и посмотрим, как это на самом деле выглядит.
Во-первых, давайте создадим новый компонент, который оказывает наши именованные компоненты. Эти компоненты будут доступны как реквизиты:
const NamedComponents = (props) => ({props.title})
{props.subTitle}
Далее давайте создадим два новых компонента, называемых названием и субтитром:
const Title = () => (Hello from Title Component
)const SubTitle = () => (Hello from SubTitle Component
)
Теперь давайте создадим новый маршрут для наших компонентов NamedComponents и определите заголовок и субтитры компонентов в IndexRoute:
Наконец, давайте добавим ссылку на нашу NAV, чтобы перейти к этому компоненту:
Named Components
Теперь мы должны увидеть наши новые именованные компоненты, когда мы смотрим на наш браузер, и при нажатии на ссылку мы должны увидеть наш заголовок и подзаголовок, рендеринг на экране:
Для справки наш код теперь должен выглядеть как это Отказ
Шаг 8. Параметры маршрута
Неотъемлемая часть многих приложений – это возможность читать параметры маршрута от URL.
Чтобы реализовать это, давайте пересмотрим наши о компонентах. Во-первых, давайте переписаним путь в нашем роутере, чтобы принять необязательный параметр, мы назовем его имя:
Теперь давайте переписываем наше составляющую компонент для использования этого переменной имени:
const About = (props) => ()Welcome to the About Page
{props.params.name}
Теперь, если мы посетим http://localhost: 8100/#/about/nader Мы увидим, что мое имя показано ниже «Добро пожаловать на страницу о странице».
Единственная проблема вот что если мы пересмотрим http://localhost:8100/#/about Мы получаем 404, потому что нет параметра имени. Чтобы исправить это, мы можем сделать параметр необязательно путем упаковки в скобках:
Теперь, если мы посетим http://localhost: 8100/#/о Мы больше не получаем 404 и все еще можем получить доступ к переменной имени.
Мы также можем сделать этот шаг дальше, проверяя, доступен ли ARPS.Name и отображение некоторого содержимого:
{ props.params.name &&Hello, {props.params.name}
}
Теперь содержимое будет показано только в том случае, если имеется имя параметра имени.
Для справки наш код теперь должен выглядеть как это Отказ
Шаг 9. Параметры строки запроса
Вы также можете пройти в строки запросов в качестве реквизита к любому компоненту, который будет отображаться на определенном маршруте, и получить доступ к этим параметрам как Props.location.Вствование.
Чтобы посмотреть, как это работает, давайте создадим новый компонент называемый запрос, и рендерируйте свойство под названием rops.location.wary.message:
const Query = (props) => ({props.location.query.message}
)
Теперь давайте создадим наш новый маршрут запросов по адресу маршрут, который уже создал:
......
Наконец, давайте ссылаемся на этот маршрут, создав новый компонент связи и прохождение в строке запроса, называемой сообщением и придавая ему значение. Это делается в собственности «до», которую мы уже использовали.
Вместо того, чтобы передавать ссылку на «до», мы вместо этого проходим объект объекта свойства Pathname и запросов:
Route Query
Теперь, если мы нажмеем на нашем ссылке на маршрут запросы, мы должны увидеть наше сообщение, представленное на экране:
Для справки наш код теперь должен выглядеть как это Отказ
Это охватывает многие основные случаи использования для начала работы с React Router.
Оригинал: “https://www.freecodecamp.org/news/beginner-s-guide-to-react-router-53094349669/”