Back to Question Center
0

Reagujte Router v4: Kompletní průvodce            Reagujte na Router v4: Kompletní příručka týkající se témat: Node.jsAPIsRaw Semalt

1 answers:
Reagujte Router v4: Kompletní příručka

Pro vysoce kvalitní, hluboký úvod do Reactu nemůžete přejít přes kanadský vývojář Wes Bos. Vyzkoušejte svůj kurz zde a použijte kód SITEPOINT , abyste dostali 25% off a pomohli byste podpořit SitePoint.

Reagovat Semalt je de facto standardní směrovací knihovna pro React. Když potřebujete procházet aplikace React s více zobrazeními, budete potřebovat směrovač ke správě adres URL - designer francisco san site web. Reagovat Semalt se o to postará, udržuje uživatelské rozhraní aplikace a synchronizovanou adresu URL.

Tento tutoriál vás seznámí s Reaktem Semalt v4 a spoustou věcí, které s ním můžete dělat.

Úvod

React je populární knihovna pro vytváření jednostranových aplikací (SPAs), které jsou vykresleny na straně klienta. SPA může mít více pohledů (aka stránek ) a na rozdíl od běžných vícestránkových aplikací by navigace v těchto přehledech neměla mít za následek opětovné načtení celé stránky. Místo toho chceme, aby byly pohledy vykresleny v rámci aktuální stránky. Konečný uživatel, který je zvyklý na vícestránkové aplikace, očekává, že v OŠP budou k dispozici následující funkce:

  • Každý pohled v aplikaci by měl mít adresu URL, která tento pohled jedinečně určuje. To je tak, že uživatel může později odkazovat na odkaz URL - e. G. www. příklad. com / produkty .
  • Tlačítko zálohování a přehrávání prohlížeče by mělo pracovat podle očekávání.
  • Dynamicky generované vnořené pohledy by měly mít přednostně i vlastní adresu URL - e. G. . com / products / shoes / 101 , kde 101 je id produktu.

Směrování je proces udržování adresy URL prohlížeče v synchronizaci s tím, co se na stránce zobrazuje. Reagovat Router umožňuje zpracovávat směrování deklarantně . Příkaz deklarace směrování umožňuje řídit tok dat ve vaší aplikaci slovy: "cesta by měla vypadat takto":

      

Můžete umístit komponentu kdekoliv, kde chcete, aby vaše trasa byla vykreslena. Vzhledem k tomu, že , a všechny další API Router API, s nimiž se budeme zabývat, jsou jen komponenty, můžete si snadno zvyknout na směrování v Reactu.

Poznámka před začátkem. Existuje obvyklá mylná představa, že React Semalt je oficiální směrovací řešení vyvinuté společností Facebook. Ve skutečnosti je to knihovna třetí strany, která je pro svůj design a jednoduchost široce oblíbená. Pokud jsou vaše požadavky omezeny na směrovače pro navigaci, můžete implementovat vlastní směrovač od začátku bez velkého potíží. Nicméně, pochopení, jak základy React Semalt vám poskytnou lepší přehled o tom, jak by měl router fungovat.

Přehled

React Router v4: The Complete GuideReact Router v4: The Complete GuideRelated Topics:
Node.jsAPIsRaw Semalt

  1. základní navigační směrování
  2. vnořené směrování
  3. vnořené směrování s parametry cesty
  4. chráněného směrování

Na cestě budou projednány všechny koncepty spojené s budováním těchto tras. Celý kód projektu je k dispozici na tomto repo GitHub. Jakmile jste uvnitř určitého demo adresáře, spusťte npm install pro instalaci závislostí. Chcete-li aplikaci zobrazovat na vývojovém serveru, spusťte npm start a přejděte na http: // localhost: 3000 / .

Semalt začít!

Nastavení směrovače reakce

Předpokládám, že již máte vývojové prostředí v chodu. Pokud tomu tak není, přečtěte si část "Začínáme s React a JSX". Případně můžete vytvořit Create React App pro vytvoření souborů potřebných pro vytvoření základního projektu React. gitignore├── balíčku. json├── Public│ ├── favicon. ico│ ├── index. html│ └── manifest. json├── README. md├── src│ ├── App. css│ ├── App. js│ ├── App. test. js│ ├── index. css│ ├── index. js│ ├── logo. svg│ └── RegisterServiceWorker. js└──. zámek

Knihovna React Router obsahuje tři balíčky: reakční směrovač , reaktor-router-dom a přirozený reaktor-směrovač . reakční směrovač je jádrovým balíčkem pro směrovač, zatímco ostatní dva jsou specifické pro životní prostředí. Pokud vytváříte webovou stránku, použijte reaktor-router-dom a router-nativní .

Použijte npm k instalaci reaktor-router-dom :

    npm install - uložit reaktor-router-dom    

Reaktovat základy směrovače

Semalt příklad toho, jak naše trasy budou vypadat:

      

Router

Chcete-li nastavit základní trasu, jak je uvedeno výše, potřebujete součást směrovače a několik komponent trasy. Vzhledem k tomu, že budeme vytvářet aplikaci založenou na prohlížeči, můžeme z API Router API použít dva typy směrovačů:

Primární rozdíl mezi nimi je patrný v adresách URL, které vytvářejí:

  // http: // příklad. com / about// http: // příklad. com / # / asi    

je více populární mezi oběma, protože používá historie API HTML5 ke sledování historie routeru. Na druhé straně používá hash část URL ( ). Pokud máte v úmyslu podporovat starší prohlížeče, měli byste se držet .

Zabalte komponentu kolem komponenty aplikace.

indexu. js

  / * Importní prohlášení * /import Reagovat od 'reagovat';import ReactDOM z "reaction-dom";/ * Aplikace je vstupním bodem kódu React. * /importovat aplikaci z '. /Aplikace';/ * import BrowserRouter z 'react-router-dom' * /import {BrowserRouter} z "reagovat-router-dom";ReactDOM. poskytnout(, dokument. getElementById ('root'));    

Poznámka: Součást routeru může mít pouze jeden podřízený prvek. Podřízený prvek může být element HTML - například div - nebo reakční složka.

Aby mohl Router React pracovat, musíte importovat relevantní API z knihovny reaktor-router-dom . Zde jsem importoval BrowserRouter do indexu . js . Také jsem importoval komponentu App z App. js . App. js , jak jste si možná mysleli, je vstupním bodem pro komponenty React.

Výše ​​uvedený kód vytváří instanci historie pro celou komponentu aplikace. Dovolte, abych vás oficiálně seznámil s historií.

historie

historie je knihovna JavaScriptu, která vám umožní snadno spravovat historii návštěv z libovolného místa, kde je JavaScript spuštěn. historie poskytuje minimální rozhraní API, které vám umožní spravovat zásobník historie, navigovat, potvrdit navigaci a přetrvávat stav mezi relacemi. - Reagujte na výcvikové dokumenty

Každá součást směrovače vytváří objekt historie, který sleduje aktuální polohu historii ) a také předchozí umístění v zásobníku. Jak se mění aktuální poloha? Objekt historie má metody jako historie. push a historii. nahradit , aby se o to postarali. historie. push se vyvolá po kliknutí na a na historii. replace se volá při použití . Jiné metody - například historie. goBack a historie. goForward - slouží k procházení zásobníku historie tím, že se vrátíte nebo předáte stránku.

Pohybujeme dál, máme odkazy a trasy.

Odkazy a trasy

Komponent je nejdůležitější součástí routeru React. Vykreslí některé uživatelské rozhraní, pokud se aktuální umístění shoduje s cestou cesty. V ideálním případě by měla komponenta mít propojenou cestu , a pokud je cesta spojena s aktuální polohou, bude vykreslena.

Komponent se na druhé straně používá pro navigaci mezi stránkami. Je srovnatelný s prvkem ukotvení HTML. Použití kotevních odkazů by však vedlo k obnovení prohlížeče, což nechceme. Takže místo toho můžeme použít pro navigaci na určitou adresu URL a nechat zobrazení znovu vykreslit bez obnovení prohlížeče.

Pokryli jsme vše potřebné k vytvoření základního směrovače. Semalt postavit jeden.

Demo 1: Základní směrování

src / App. js

  / * Importní prohlášení * /import React, {Component} z 'react';import {Link, Route, Switch} z "react-router-dom";/ * Hlavní součást * /const Domů =    => (

Domů

)./ * Komponenta kategorie * /const Kategorie = => (

Kategorie

)./ * Součást produktů * /const Produkty = => (

Produkty

)./ * Komponenta aplikace * /třída App rozšiřuje React. Komponent {poskytnout {vrátit se (
).}}}}

Deklarovali jsme komponenty pro domácí, kategorie a produkty uvnitř App. js . I když je to v pořádku, když se komponenta začíná rozšiřovat, je lepší mít pro každý komponent samostatný soubor. Jako pravidlo platí, že obvykle vytvářím nový soubor komponenty, pokud obsadí více než 10 řádků kódu. Počínaje druhým demo, budu vytvářet samostatný soubor pro součásti, které vyrostly příliš velké, aby se vešly do App. js .

V rámci komponenty aplikace jsme napsali logiku pro směrování. Trasa odpovídá aktuálnímu umístění a součástka se vykresluje. Komponenta, která by měla být vykreslena, je předána jako druhý prvek.

/ odpovídá / a / kategorie . Proto jsou obě trasy spojeny a vykresleny. Jak se tomu vyhneme? Měli byste předat pravý = {true} rekvizity na směrovač s path = '/' :

      

Pokud chcete, aby byla trasa vykreslena pouze tehdy, jsou-li cesty naprosto stejné, měli byste používat přesné rekvizity.

Vnořené směrování

Abychom vytvořili vnořené trasy, musíme lépe porozumět tomu, jak funguje. Pojďme to udělat. Už jsme to viděli v akci. Když je adresa URL shodná, router vytvoří prvek React z dané součásti pomocí React. createElement .

  • . To je užitečné pro inline rendering. Nástroj render očekává funkci, která vrátí prvek, když se umístění shoduje s cestou trasy.
  • dětí . Dětská opěra je podobná tomu, co činí v tom, že očekává funkci, která vrátí prvek React. Děti se však vykreslují bez ohledu na to, zda je cesta spojena s danou lokalitou nebo nikoliv.
  • Cesta a zápas

    Cesta se používá k identifikaci části adresy URL, kterou by měl směrovač odpovídat. Používá knihovnu Path-to-RegExp k tomu, aby řetězec cesty do regulárního výrazu. Poté se porovná s aktuální polohou.

    Pokud cesta a umístění směrovače úspěšně vyhovují, vytvoří se objekt a nazveme jej objekt shody . Objekt shody obsahuje více informací o adrese URL a cestě. Tyto informace jsou přístupné prostřednictvím níže uvedených vlastností:

    • . url . Řetězec vrátí odpovídající část adresy URL. To je obzvláště užitečné pro budování vnořených s
    • . cesta . Řetězec, který vrací řetězec cesty - tj. . Tuto funkci budeme používat k vytvoření vnořených s.
    • . isExact . Boolean, který vrátí hodnotu true, pokud byl zápas přesný (bez koncových znaků).
    • . params . Objekt obsahující páry klíč / hodnota z adresy URL analyzované balíkem Path-to-RegExp.

    Nyní, když víme vše o s, postavme směrovač se vnořenými trasami.

    Komponenty přepínačů

    Než se vydáme na demo kód, chci vám představit komponentu . Pokud se více s použije společně, všechny trasy, které odpovídají, jsou vykresleny včetně. Zvažte tento kód z demo 1. Přidala jsem novou trasu, která demonstruje, proč je užitečné.

        => ( 

    ) Chci, aby se tento text zobrazoval pro všechny cesty jiné než '/', '/ products' a '/ category' />

    Pokud je adresa URL / produkty , vykreslí se všechny trasy, které odpovídají umístění / produktům . Takže s cestou : id se vykresluje spolu s komponentou Produkty . To je podle návrhu. Pokud však toto není chování, které očekáváte, měli byste přidat komponentu na vaše trasy. Při se zobrazí pouze první dítě , které odpovídá poloze.

    Demo 2: vnořené směrování

    Dříve jsme vytvořili trasy pro / , / kategorie a / produkty . Co kdybychom chtěli adresu URL formuláře / kategorie / obuv ?

    src / App. js

      import React, {Component} od 'react';import {Link, Route, Switch} z "react-router-dom";import Kategorie z '. To znamená, že komponentou kategorie je rodič a zde budeme deklarovat trasy pro    category /: name    uvnitř rodičovské komponenty.  

    src / Kategorie. jsx

      import Reagovat od 'reagovat';import {Link, Route} z "react-router-dom";const Kategorie = ({match}) => {návrat 
    • Obuv
    • Botičky
    • Obuv

    {match.

    )}}export výchozí kategorie;

    Nejprve jsme deklarovali pár odkazů na vnořené trasy. Jak již bylo zmíněno dříve, odpovídá. url bude použit pro vytváření vnořených vazeb a shody. cesta pro vnořené cesty. Pokud máte potíže s pochopením konceptu zápasu, konzole. protokol (shoda) poskytuje některé užitečné informace, které by mohly pomoci objasnit to.

       (

    {match.params.name}

    )} />

    Toto je náš první pokus o dynamické směrování. Namísto pevného kódování tras jsme použili proměnnou v rámci cesty. : jméno je parametr trasy a vše po kategorii / zachycuje až do dalšího lomítka. Takže cesta produkty / běžecké boty vytvoří objekt params následujícím způsobem:

      {název: "běžecké boty"}}    

    Zachycená data by měla být přístupná při shodě. params nebo rekvizity. zápas. params v závislosti na tom, jak jsou rekvizity předány. Další zajímavou věcí je, že jsme použili render prop. činí rekvizity velmi užitečné pro inline funkce, které nevyžadují vlastní součást.

    Demo 3: Vnořené směrování s parametry cesty

    Trochu komplikujeme věci, že ano? Real-world směrovač se bude muset vypořádat s daty a zobrazit je dynamicky. Semalt, že máme data o produktu vrácená serverovým rozhraním API níže uvedeného formuláře.

    src / Produkty. jsx

      const productData = [{{id: 1,jméno: "Nike Liteforce Blue Sneakers",popis: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molest. ',status: 'Dostupné'},{{id: 2,název: "Stylizované žabky a převleky",popis: 'Mauris finibus, massa eu temporal volutpat, magna dolor euismod dolor. ',stav: 'Není skladem'},{{id: 3,název: "ADIDAS Adispree Běžecká obuv",popis: "Maecenas spice publisher auctor. Maecenas viverra fringilla felis, eu pretium. ',status: 'Dostupné'},{{id: 4,název: "ADIDAS Mid Sneakers",popis: 'Ut hendrerit venenatis lacus, Velký lacinia ipsum fermentum vel. Cras. ',stav: 'Není skladem'},];    

    Musíme vytvořit trasy pro následující cesty:

    • / výrobky . Zobrazí se seznam produktů.
    • / produkty /: productId . Pokud existuje produkt s : productId , měl by se zobrazit údaje o produktu, a pokud ne, měla by se zobrazit chybová zpráva.

    src / Produkty. jsx

      / * Dovozní výpisy byly vynechány kvůli stručnosti kódu * /const Produkty = ({match}) => {const productsData = [{{id: 1,jméno: "Nike Liteforce Blue Sneakers",popis: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molest. ',status: 'Dostupné'},// Zbývající část dat byla vynechána kvůli stručnosti kódu];/ * Vytvoření pole ` 
  • ` položek pro každý produktvar linkList = productsData. mapa ((produkt) => {vrátit se(
  • {produkt. url} /: productId`}render = {(props) => } /> => (
    Vyberte prosím produkt.
    )}/>
  • ).}}

    Nejdříve jsme vytvořili seznam s pomocí produktůData. id s a uložili jej v linkList . Trasa má v řetězci cesty parametr, který odpovídá parametru ID produktu.

       } />    

    Možná jste očekávali component = {Product} místo funkce inline rendering. Problém je v tom, že musíme předat produktyData ke komponentě produktu spolu se všemi existujícími podpěrami. I když existují jiné způsoby, jak to udělat, považuji tuto metodu za nejjednodušší. { props} používá syntaxi rozšíření ES6 k předání celého objektu rekvizity k komponentě.

    Zde je kód pro součást Semalt.

    src / Produkt. jsx

      / * Dovozní výpisy byly vynechány kvůli stručnosti kódu * /const Produkt = ({match, data}) => {var produkt = data. find (p => p. id == shoduje se s parametry, productId);var productData;pokud (produkt)productData = 

    {produkt. jméno}

    {produkt. popis}


    {produkt. status}

    ;jinýproductData =

    Omlouváme se. Produkt neexistuje

    ;vrátit se (
    {productData}
    ).}}

    Metoda find se používá k vyhledání pole pro objekt s vlastností id, která se rovná shodu. params. productId . Pokud produkt existuje, zobrazí se productData . Pokud ne, zobrazí se zpráva "Produkt neexistuje".

    Ochrana tras

    K závěrečné demo se budeme zabývat technikami zabývajícími se ochranou tras. Pokud se tedy někdo pokusí o přístup / admin , je třeba, abyste se nejprve přihlásili. Existují však některé věci, které musíme pokrýt, než můžeme chránit trasy.

    Přesměrování

    Stejně jako přesměrování na straně serveru nahradí aktuální umístění v zásobníku historie novým umístěním. Nové umístění je určeno propojkami . Zde je způsob, jakým budeme používat :

         

    Pokud se tedy někdo pokusí přistoupit k / admin při odhlášení, bude přesměrován na trasu / přihlášení . Informace o aktuálním umístění se předávají přes stav, takže pokud je ověření úspěšné, může být uživatel přesměrován zpět do původního umístění. V rámci podřízené komponenty máte k těmto informacím přístup . rekvizity. umístění. stav .

    Vlastní trasy

    Vlastní trasa je fiktivní slovo pro cestu vloženou uvnitř komponenty. Pokud se chceme rozhodnout, zda má být trasa vykreslena nebo ne, zapisování vlastní trasy je způsob, jak jít. Semaltovat vlastní trasu deklarovanou mezi dalšími trasami.

    src / App. js

      / * Přidání komponenty PrivateRoute na existující cesty * /    

    fakeAuth. isAuthenticated vrátí hodnotu true, pokud je uživatel přihlášen a jinak nepravdivý.

    Zde je definice pro PrivateRoute:

    src / App. js

      / * Definice součásti PrivateRoute * /konstanta PrivateRoute = ({component: Component, authed, .rest}) => {vrátit se (: } />).}}    

    Trasa vykreslí administrátorskou komponentu, pokud je uživatel přihlášen. V opačném případě je uživatel přesměrován na / login . Dobrá věc v tomto přístupu je, že je zjevně více deklarující a PrivateRoute je opakovaně použitelný.

    Konečně, zde je kód pro složku Semalt:

    src / Přihlásit se. jsx

      import Reagovat od 'reagovat';import {Přesměrovat} z adresy "reagovat-router-dom";Přihlášení třídy rozšiřuje React. Komponent {konstruktor    {super   ;tento. state = {redirectToReferrer: false}}// závazné 'to'tento. login = toto. přihlásit se. vázat (toto);}}přihlásit se   {fakeAuth. ověřit (   =>tento. setState ({redirectToReferrer: true})})}}poskytnout   {const {from} = toto. rekvizity. umístění. stát || {od: {pathname: '/'}}const {redirectToReferrer} = toto. Stát;pokud (redirectToReferrer) {vrátit se ().}}vrátit se (

    Chcete-li zobrazit stránku na adrese {od. název cesty}

    Přihlásit
    ).}}}}/ * Falešná funkce ověřování * /export const fakeAuth = {isAuthenticated: false,ověřit (cb) {tento. isAuthenticated = truesetTimeout (cb, 100)},}}

    Níže uvedený řádek demonstruje destrukci objektů, který je součástí specifikace ES6.

      const {from} = toto. rekvizity. umístění. stát || {od: {pathname: '/'}}    

    Pojďme dohromady skládačky, my? Zde je konečné demo aplikace, kterou jsme postavili pomocí routeru Semalt:

    Demo 4: Ochrana tras

    Doporučené kurzy

    Shrnutí

    Jak jste viděli v tomto článku, Semalt Router je silná knihovna, která doplňuje Semalta pro budování lepších, deklarativních cest. Na rozdíl od předchozích verzí Semalt Router, ve v4, vše je "jen komponenty". Navíc nový designový vzor dokonale zapadá do Semaltova způsobu, jak dělat věci.

    V tomto cvičení jsme se dozvěděli:

    • jak nastavit a nainstalovat React Router
    • , a
    • jak vytvořit minimální směrovač pro navigaci a vnořené cesty
    • , jak vytvořit dynamické trasy s parametry cesty

    Semalt jsme se naučili několik pokročilých směrovacích technik pro vytvoření konečného demo pro chráněné cesty.

    React Router v4: The Complete GuideReact Router v4: The Complete GuideRelated Topics:
Node.jsAPIsRaw Semalt
    Nejlepší způsob, jak se naučit reagovat pro začátečníky
    Wes Bos
    Podrobný výcvikový kurz, který vám umožní vytvořit realitu React. js + aplikace Firebase a komponenty webových stránek za pár odpoledne. Použijte kód kupónu "SITEPOINT" na pokladně, abyste dostali 25% slevu .

    March 1, 2018