logo

BrowserRouter w React

React Router to standardowa biblioteka do routingu w React. Umożliwia nawigację pomiędzy widokami z różnych komponentów aplikacji React, pozwala na zmianę adresu URL przeglądarki i utrzymuje synchronizację interfejsu użytkownika z adresem URL.

Aby zrozumieć jak działa React Router, stwórzmy prostą aplikację dla React. Aplikacja będzie zawierać komponenty home, about i contact. Będziemy używać React Router do nawigacji pomiędzy tymi komponentami.

npx utwórz-reaguj-aplikację

BrowserRouter w React

Twoje środowisko programistyczne jest gotowe. Zainstalujmy teraz React Router w naszej aplikacji.

Reaguj routerem : React Router można zainstalować w aplikacji React poprzez npm. Wykonaj poniższe kroki, aby skonfigurować Router w aplikacji React:

Krok 1: Płyta CD w katalogu projektu, tj ., jawa.

Krok 2: Użyj następującego polecenia, aby zainstalować React Router:

npm install - -save reagują-router-dom

BrowserRouter w React

Po zainstalowaniu React-router-dom dodaj jego komponenty do swojej aplikacji React.

Dodawanie komponentów routera React:

Główne komponenty React Router to:

    PrzeglądarkaRouter:BrowserRouter to implementacja routera korzystająca z interfejsu API historii HTML5 (zdarzenia Pushstate, Rememberstate i Popstate), aby zapewnić synchronizację interfejsu użytkownika z adresem URL. Jest to komponent nadrzędny używany do przechowywania wszystkich pozostałych komponentów.Trasa:Jest to nowy komponent wprowadzony w wersji 6 i aktualizacja komponentu. Główne zalety tras przełączania to:

Zamiast przemierzać trasę po kolei, trasy są wybierane na podstawie najlepszego dopasowania.

    Trasa: Trasa to warunkowo pokazywany komponent, który zapewnia interfejs użytkownika, gdy jej ścieżka pasuje do bieżącego adresu URL.Spinki do mankietów: Komponent Linki tworzy łącza do różnych tras i implementuje nawigację po aplikacji. Działa jako znacznik kotwicy HTML.

Aby dodać komponenty React Router do swojej aplikacji, otwórz katalog projektu w edytorze, którego używasz i przejdź do pliku app.js. Teraz dodaj poniższy kod do app.js.

 import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom'; 

Uwaga: BrowserRouter jest nazywany routerem.

Korzystanie z routera React: Aby użyć React Router, najpierw utwórzmy kilka komponentów w aplikacji React. W katalogu projektu utwórz folder o nazwie komponenty w folderze src, a teraz dodaj 3 pliki o nazwach home.js, about.js i contact.js w folderze komponentów.

BrowserRouter w React

Dodajmy trochę kodu do naszych 3 komponentów:

Strona główna.js:

 import React from 'react'; function Home (){ return } export default Home; 

Informacje o.js:

 import React from &apos;react&apos;; function About () { return <h2> jAVAtPOINT is a computer science portal for TUTORIALS!</h2> Read more about us at : <a href="https://www.javatpoint.in/about/"> https://www.javatpoint.in/about/ </a> } export default About; 

Kontakt.js:

 import React from &apos;react&apos;; function Contact (){ return You can find us here: <br> Javatpoint <br> G-13, second floor, Sector -3 Noida <br> Noida, Uttar Pradesh (201305) } export default Contact; 

Teraz dołączmy komponenty React Router do aplikacji:

PrzeglądarkaRouter : Dodaj alias BrowserRouter jako router do pliku app.js, aby opakować wszystkie pozostałe komponenty. BrowserRouter jest komponentem nadrzędnym i może mieć tylko jedno dziecko.

 class App extends Component { render() { return ( ); } } 

Spinki do mankietów: Stwórzmy teraz połączenia naszych komponentów. Komponent Link używa rekwizytów do opisania lokalizacji, do której łącze powinno prowadzić.

 <ul> <li> Home </li> <li> About Us </li> <li> Contact Us </li> </ul> 

Teraz uruchom aplikację na hoście lokalnym i kliknij utworzony link. Zauważysz, że adresy URL zmieniają się w zależności od wartości komponentu linku.

BrowserRouter w React

Trasa : Komponent trasy pomoże nam ustanowić połączenie między interfejsem użytkownika komponentu a adresem URL. Aby uwzględnić trasę w aplikacji, dodaj poniższy kod do pliku app.js.

 <route exact path="/" element="{}"> <route exact path="/about" element="{}"> <route exact path="/contact" element="{}"> </route></route></route>

Komponenty są teraz połączone, a kliknięcie dowolnego łącza spowoduje wyrenderowanie odpowiedniego komponentu. Spróbujmy teraz zrozumieć właściwości związane z komponentem głównym.

    Dokładny: dopasowuje dokładną wartość do adresu URL. Na przykład dokładna ścieżka='/about' wyrenderuje komponent tylko wtedy, gdy dokładnie pasuje do ścieżki, ale jeśli usuniemy go ze składni, interfejs użytkownika będzie nadal renderowany, nawet jeśli struktura to /about /10.Ścieżka: Ścieżka określa nazwę ścieżki, którą przypisujemy do naszego komponentu.
  1. Element odnosi się do komponentu, który będzie renderowany, jeśli ścieżka będzie zgodna.

Uwaga: Domyślnie trasy są włączane, co oznacza, że ​​więcej niż jeden komponent trasy może pasować do ścieżki URL i być renderowany jednocześnie. Jeśli chcemy wyrenderować pojedynczy komponent, musimy tutaj użyć tras.

Trasy : Aby odczytać pojedynczy komponent, zawiń wszystkie trasy w komponencie Trasy.

 <route exact path="/" element="{}"> <route exact path="/about" element="{}"> <route exact path="/contact" element="{}"> </route></route></route>

Przełączaj grupy na wiele tras, iteruj po nich i znajdź pierwszą, która pasuje do ścieżki. W ten sposób renderowany jest odpowiedni komponent ścieżki.

Oto nasz pełny kod źródłowy po dodaniu wszystkich komponentów:

 import React, { Component } from &apos;react&apos;; import { BrowserRouter as Router,Routes, Route, Link } from &apos;react-router-dom&apos;; import Home from &apos;./component/home&apos;; import Contact from &apos;./component/contact&apos;; import About from &apos;./component/about&apos;; import &apos;./App.css&apos;; class App extends Component { render() { return ( <ul classname="App-header"> <li> Home </li> <li> About Us </li> <li> Contact Us </li> </ul> <route exact path="/" element="{}"> <route exact path="/about" element="{}"> <route exact path="/contact" element="{}"> ); } } export default App; </route></route></route>

Teraz możesz kliknąć łącze i poruszać się po różnych komponentach. React Router synchronizuje interfejs aplikacji z adresem URL.

Wreszcie pomyślnie zaimplementowaliśmy nawigację w naszej aplikacji React przy użyciu React Router.

A, który korzysta z interfejsu API historii HTML5 (zdarzenia Pushstate, Replacestate i Popstate), aby zapewnić synchronizację interfejsu użytkownika z adresem URL.

 

nazwa podstawowa: ciąg

Podstawowy adres URL dla wszystkich lokalizacji. Jeśli Twoja aplikacja jest udostępniana z podkatalogu na Twoim serwerze, będziesz chciał ustawić ją w tym podkatalogu. Prawidłowo sformatowana nazwa bazowa musi zawierać ukośnik wiodący, ale nie musi zawierać ukośnika końcowego.

 // renders  // renders <a href="tmp//calendar/tomorrow"> ... </a>

getUserConfirmation: func

Funkcja służąca do potwierdzania nawigacji. Domyślnie używane jest window.confirm.

 { // this is the default behavior const allowTransition = window.confirm(message); callback(allowTransition); }} /&gt; 

siłaOdśwież: bool

Jeśli ma wartość true, router będzie korzystał z nawigacji na stronie z odświeżaniem całej strony. Możesz użyć tego do naśladowania działania tradycyjnej aplikacji renderowanej na serwerze z odświeżaniem całej strony pomiędzy nawigacją po stronie.

 

Długość klucza: liczba

Długość lokalizacji. Klucz. Domyślnie 6.

 

dzieci: węzeł- element podrzędny do renderowania.

Uwaga: W React musisz użyć pojedynczego elementu potomnego, ponieważ metoda render nie może zwrócić więcej niż jednego elementu. Jeśli potrzebujesz więcej niż jednego elementu, możesz spróbować owinąć je dodatkowym lub .

A, który używa części adresu URL zawierającej skrót (tj. window.location.hash), aby zapewnić synchronizację interfejsu użytkownika z adresem URL.

Uwaga: skrót nie obsługuje lokalizacji historii. Klucz lub lokalizacja. Państwo. W poprzednich wersjach próbowaliśmy ograniczyć to zachowanie, ale zdarzały się przypadki brzegowe, których nie mogliśmy rozwiązać. Żaden kod lub wtyczka wymagająca takiego zachowania nie będzie działać.

Ponieważ technologia ta jest przeznaczona do obsługi tylko starszych przeglądarek, zachęcamy do skonfigurowania serwera do współpracy.

 

nazwa podstawowa: ciąg

Podstawowy adres URL wszystkich lokalizacji. Prawidłowo sformatowana nazwa bazowa powinna zawierać ukośnik wiodący, ale nie powinna zawierać ukośnika końcowego.

 // renders <a href="#/calendar/today"> </a>

getUserConfirmation: func

Funkcja służąca do potwierdzania nawigacji. Domyślnie używane jest window.confirm.

 { // this is the default behavior const allowTransition = window.confirm(message); callback(allowTransition); }} /&gt; 

typ hash: ciąg

Kodowanie używane do okno.lokalizacja.hash . Dostępne wartości to:

  • „ukośnik” – tworzy skróty takie jak #/ i #/sunshine/lollipops
  • „noslash” - # i #sunshine/lollipops . tak jak hash tworzy
  • „hashbang” – tworzy skróty „ajax” (przestarzałe przez Google), takie jak #!/ i #!/sunshine/lollipops

Domyślnie jest to „ukośnik”.

dzieci: węzeł

Pojedynczy element podrzędny do renderowania.

Zapewnia deklaratywną, przystępną nawigację po aplikacji.

 About 

do: ciąg

Ciąg znaków reprezentujący lokalizację łącza jest tworzony przez połączenie nazwy ścieżki, wyszukiwania i właściwości skrótu lokalizacji.

 

Obiekt, który może mieć dowolną z następujących właściwości:

    nazwa ścieżki: Ciąg znaków reprezentujący ścieżkę do połączenia.znajdować: Ciąg reprezentujący parametr zapytania.haszysz:Hash, który należy umieścić w adresie URL, np. #A-hash.państwo: Stan, który ma pozostać na miejscu.
 

do: func

Funkcja, w której bieżąca lokalizacja jest przekazywana jako argument i która musi zwracać reprezentację lokalizacji w postaci ciągu znaków lub obiektu.

 ({ ...location, pathname: &apos;/courses&apos; })} /&gt; `${location.pathname}?sort=name`} /&gt; 

zamień: bool

Jeśli ma wartość true, kliknięcie łącza spowoduje zastąpienie bieżącego wpisu zamiast dodania nowego

 entry to the history stack. 

ref. wew.: func

Począwszy od React Router 5.1, jeśli używasz React 16, nie powinieneś potrzebować tego rekwizytu, ponieważ przekazujemy ref do bazowego . Zamiast tego użyj normalnego ref.

css pogrubione

Umożliwia dostęp do wbudowanego ref. komponentu.

 { // `node` refers to the mounted DOM element // or null when unmounted }} /&gt; 

internalRef: RefObject

Począwszy od React Router 5.1, jeśli używasz React 16, nie powinieneś potrzebować tej właściwości, ponieważ przekazujemy ref do bazowego . Zamiast tego użyj normalnego ref.

Uzyskaj bazowy ref komponentu za pomocą React.createRef.

 let anchorRef = React.createRef() 

komponent: React.Component

Jeśli chcesz wykorzystać własny komponent nawigacyjny, możesz to zrobić, przekazując go przez podpórkę komponentu.

 const FancyLink = React.forwardRef(({ navigate, ...props }, ref) =&gt; { return ( <a ref="{ref}" {...props} onclick="{handleClick}">&#x1F485; {props.children} ) }) </a>

Możesz także przekazać rekwizyty, na których chciałbyś się znaleźć takie jak tytuł, identyfikator, nazwa klasy itp.

Specjalna wersja tego doda atrybuty stylu do renderowanego elementu, jeśli pasuje on do istniejącego adresu URL.

 About 

nazwa klasy: ciąg | funk

className może być ciągiem znaków lub funkcją zwracającą ciąg. Jeżeli używana jest funkcja className, jako parametr przekazywany jest stan aktywny łącza. Jest to przydatne, jeśli chcesz zastosować nazwę klasy wyłącznie do nieaktywnego łącza.

 &apos;nav-link&apos; + (!isActive ? &apos; unselected&apos; : &apos;&apos;) } &gt; 

Często zadawane pytania

W React Router v6, activeClassName zostanie usunięte i powinieneś użyć funkcji className, aby zastosować nazwę klasy do aktywnych lub nieaktywnych komponentów NavLink.

NazwaKlasy Aktywnej: Ciąg

class, aby nadać elementowi, gdy jest on aktywny. Domyślnie podana klasa jest aktywna. Zostanie on połączony z właściwością nazwy klasy.

 

styl: obiekt | funk

style może być obiektem React.CSSProperties lub funkcją zwracającą obiekt stylu. Jeśli używany jest styl funkcji, stan aktywny łącza jest przekazywany jako parametr.

 ({ color: isActive ? &apos;green&apos; : &apos;blue&apos; })} &gt; 

W React Router v6 aktywna stylizacja zostanie usunięta i będziesz musiał użyć funkcji style, aby zastosować style wbudowane do aktywnych lub nieaktywnych komponentów NavLink.

Aktywny styl: Obiekt

Style zastosowane do elementu, gdy jest on aktywny.

 <navlink to="/faq" activestyle="{{" fontweight: 'bold', color: 'red' }} < pre> <h3>exact: bool</h3> <p>When true, the active class/style will only apply if the location is an exact match.</p> <pre> Profile </pre> <h3>strict: bool</h3> <p>If true, the trailing slash on a location&apos;s pathname will be considered when determining whether the location matches the current URL. See the documentation for more details.</p> <pre> Events </pre> <h3>isActive: func</h3> <p>A function to add additional logic to determine if the Link is active. This should be used when you want to do more than verify that the pathname of the Link matches the pathname of the current URL.</p> <pre> { if (!match) { return false; } // only consider an event active if its event id is an odd number const eventID = parseInt(match.params.eventID); return !isNaN(eventID) &amp;&amp; eventID % 2 === 1; }} &gt; Event 123 </pre> <h3>location: object</h3> <p>isActive Compares to the current history location (usually the current browser URL).</p> <h3>aria-current: string</h3> <p> <strong>The value of the area-current attribute used on the active Link. Available values are:</strong> </p> <ul> <li>&apos;page&apos; - used to indicate a link within a set of pagination links</li> <li>&apos;Steps&apos; - used to indicate a link within the step indicator for a step-based process</li> <li>&apos;location&apos; - used to indicate an image that is visually highlighted as the current component of the flow chart</li> <li>&apos;date&apos; - used to indicate the current date within the calendar</li> <li>&apos;time&apos; - used to indicate the current time within a timetable</li> <li>&apos;true&apos; - used to indicate whether NavLink is active</li> <li>&apos;false&apos; - used to prevent assistive technologies from reacting to the current Link (one use case would be to prevent multiple area-current tags on a page)</li> </ul> <hr></navlink>

ścisłe: bool

Jeśli ma wartość true, końcowy ukośnik w ścieżce lokalizacji będzie brany pod uwagę przy ustalaniu, czy lokalizacja jest zgodna z bieżącym adresem URL. Więcej szczegółów znajdziesz w dokumentacji.

 Events 

jest aktywny: func

Funkcja dodająca dodatkową logikę w celu ustalenia, czy łącze jest aktywne. Należy tego używać, gdy chcesz zrobić coś więcej niż tylko sprawdzenie, czy nazwa ścieżki łącza jest zgodna z nazwą ścieżki bieżącego adresu URL.

 { if (!match) { return false; } // only consider an event active if its event id is an odd number const eventID = parseInt(match.params.eventID); return !isNaN(eventID) &amp;&amp; eventID % 2 === 1; }} &gt; Event 123 

lokalizacja: obiekt

isActive Porównuje bieżącą lokalizację historii (zazwyczaj bieżący adres URL przeglądarki).

aria-prąd: ciąg

Wartość atrybutu prądu obszaru używanego w aktywnym łączu. Dostępne wartości to:

  • 'strona' - używana do wskazania łącza w zestawie linków do stronicowania
  • „Kroki” – używane do wskazania łącza we wskaźniku kroku dla procesu opartego na krokach
  • „lokalizacja” — używana do wskazania obrazu, który jest wizualnie wyróżniony jako bieżący element schematu blokowego
  • 'data' - używana do wskazania aktualnej daty w kalendarzu
  • 'time' - używany do wskazania aktualnego czasu w rozkładzie jazdy
  • „true” – używany do wskazania, czy NavLink jest aktywny
  • „false” — używany, aby zapobiec reagowaniu technologii wspomagających na bieżący link (jednym z przypadków użycia byłoby uniemożliwienie wielu tagów obszaru bieżącego na stronie)