Back to Question Center
0

Reagujte Router v4: Kompletná príručka            Reagujte Router v4: Kompletný sprievodcaTémané témy: Node.jsAPIsRaw Semalt

1 answers:
Reagujte Router v4: Kompletný sprievodca

Pre vysokokvalitné a hlboké úvod do Reactu nemôžete prekonávať kanadského plnohodnotného vývojára Wesa Bosa. Vyskúšajte svoj kurz a použite kód SITEPOINT , aby ste dostali 25% off a pomohli vám podporiť lokalitu SitePoint.

Reagovať Semalt je de facto štandardná smerovacia knižnica pre React. Keď potrebujete prechádzať aplikáciou React s viacerými zobrazeniami, budete potrebovať smerovač na správu webových adries - servers for minecraft 1.5.2. Reagujte na to, že Semalt sa postará o udržanie používateľského rozhrania aplikácie a synchronizovanej webovej adresy.

Tento tutoriál vás zavádza do programu React Semalt v4 a veľa vecí, ktoré s ním môžete robiť.

Úvod

React je populárna knižnica na vytváranie jednostránkových aplikácií (SPA), ktoré sú vykreslené na strane klienta. SPA môže mať viacnásobné zobrazenia (aka stránky ) a na rozdiel od konvenčných viacstránkových aplikácií by navigácia cez tieto zobrazenia nemala viesť k opätovnému načítaniu celej stránky. Namiesto toho chceme, aby boli zobrazenia zobrazené v aktuálnej stránke. Koncový používateľ, ktorý je zvyknutý na viacstránkové aplikácie, očakáva, že v OCHÚ budú prítomné nasledujúce funkcie:

  • Každý pohľad v aplikácii by mal mať adresu URL, ktorá tento pohľad jednoznačne určuje. Je to tak, aby si používateľ mohol záložku URL odkazovať neskôr - e. g. www. príkladom. com / výrobky .
  • Tlačidlo spätného a posunu prehliadača by malo fungovať podľa očakávania.
  • Dynamicky generované vnorené zobrazenia by mali mať prednostne aj vlastnú adresu URL - e. g. . com / products / shoes / 101 , kde 101 je id produktu.

Smerovanie je proces udržiavania URL prehliadača v synchronizácii s tým, čo sa zobrazuje na stránke. React Router umožňuje spracovávať deklaratívne smerovanie . Deklaratívny smerovací prístup vám umožňuje kontrolovať tok dát vo vašej aplikácii tak, že "cesta by mala vyzerať takto":

      

Môžete umiestniť komponenty kdekoľvek, kde chcete, aby sa vaša trasa vykreslila. Vzhľadom k tomu, že , a všetky ostatné API reaktorov, s ktorými sa budeme zaoberať, sú len komponenty, môžete ľahko zvyknúť na smerovanie v React.

Poznámka pred začiatkom. Existuje všeobecná mylná predstava, že React Semalt je oficiálne smerovacie riešenie vyvinuté spoločnosťou Facebook. V skutočnosti je to knižnica tretej strany, ktorá je veľmi obľúbená svojim dizajnom a jednoduchosťou. Ak sú vaše požiadavky obmedzené na smerovače pre navigáciu, môžete implementovať vlastný smerovač od začiatku bez veľkého hádka. Avšak pochopenie, ako základy React Semalt vám poskytnú lepšie poznatky o tom, ako by mal router fungovať.

Prehľad

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

  1. základné navigačné smerovanie
  2. vnorené smerovanie
  3. vnorené smerovanie s parametrami cesty
  4. chráneného smerovania

Na ceste sa budeme zaoberať všetkými koncepciami spojenými s budovaním týchto trás. Celý kód projektu je k dispozícii na tomto repo GitHub. Akonáhle ste v rámci konkrétneho demo adresára, spustite npm install pre inštaláciu závislostí. Ak chcete aplikáciu zobrazovať na vývojovom serveri, spustite npm štart a prejdite na http: // localhost: 3000 / a uvidíte demo v akcii.

Semalt začať!

Nastavenie smerovača reakcie

Predpokladám, že už máte vývojové prostredie v prevádzke. Ak nie, prejdite na "Začíname s React a JSX". Prípadne môžete použiť aplikáciu Create React, aby ste vygenerovali súbory potrebné na vytvorenie základného projektu React. gitignore├── balíček. json├── Public│ ├── favicon. ico│ ├── index. html│ └── manifest. json├── README. md├── src│ ├── App. css│ ├── App. js│ ├── App. test. js│ ├── index. css│ ├── index. jsLogo │ ├──────── svg│ └── registruServiceWorker. js└── priadza. zamknúť

Knižnica React Router sa skladá z troch balíkov: reaktor-router , reaktor-router-dom a natívne reaktor-router . reakčný smerovač je jadrový balík pre smerovač, zatiaľ čo ostatné dva sú špecifické pre životné prostredie. Mali by ste použiť reaktor-router-dom , ak vytvárate webové stránky a router-native v prostredí vývoja mobilných aplikácií pomocou React Native.

Použite npm na inštaláciu reaktor-router-dom :

    npm nainštalujte --save reak-router-dom    

Reakt Routder Základy

Semalt príklad toho, ako naše cesty budú vyzerať:

      

Router

Potrebujete komponent routeru a niekoľko komponentov trasy na nastavenie základnej trasy, ako je uvedené vyššie. Keďže budujeme aplikáciu založenú na prehliadači, môžeme z API smerovača React Router použiť dva typy smerovačov:

Primárny rozdiel medzi nimi je viditeľný v URL, ktoré vytvárajú:

  // http: // príklad. com / about// http: // príklad. com / # / about    

je viac populárny medzi týmito dvoma, pretože používa históriu API HTML5 na sledovanie histórie smerovača. na druhej strane používa hash časť URL ( ). Ak máte v úmysle podporovať staršie prehliadače, mali by ste držať .

Zložte komponent okolo komponentu aplikácie.

. js

  / * Dovozné výkazy * /import Reagovať od 'reagovať';import ReactDOM z "reaction-dom";/ * Aplikácia je vstupný bod kódu React. * /import aplikácie z '. / Aplikácia ";/ * import BrowserRouter z 'reak-router-dom' * /import {BrowserRouter} z "reak-router-dom";ReactDOM. render (, dokument. getElementById ( 'koreň'));    

Poznámka: Komponent smerovača môže mať len jeden podriadený prvok. Podriadený prvok môže byť element HTML - napríklad div - alebo reakčná zložka.

Aby mohol React Router pracovať, musíte importovať relevantné rozhranie API z knižnice reaktor-router-dom . Tu som importoval BrowserRouter do indexu . js . Taktiež som importoval komponent App z App. js . App. js , ako ste možno uhádli, je vstupným bodom pre komponenty React.

Vyššie uvedený kód vytvára históriu celého nášho komponentu aplikácie. Dovoľte mi, aby som vás formálne predstavil v histórii.

História

História je knižnica JavaScript, ktorá vám umožňuje jednoducho spravovať históriu relácií kdekoľvek sa spúšťa JavaScript. história poskytuje minimálnu rozhranie API, ktorá vám umožňuje spravovať zásobník histórie, navigovať, overovať navigáciu a pretrvávať stav medzi reláciami. - Reaktívne vzdelávacie dokumenty

Každý komponent smerovača vytvára objekt histórie, ktorý sleduje aktuálnu polohu ( histórie ) a tiež predchádzajúce miesta v stohu. Ako sa mení aktuálna poloha? Objekt História obsahuje metódy ako história . história push a . nahradiť , aby sa o to postaral. histórie. push sa vyvolá po kliknutí na a na históriu. replace sa volá pri použití . Ďalšie metódy - ako napríklad história . goBack a históriu. goForward - sa používajú na navigáciu v zásobníku histórie tým, že ide späť alebo dopredu.

Pohybujeme ďalej, máme odkazy a trasy.

Odkazy a trasy

Komponent je najdôležitejšou súčasťou routra React. Vykresľuje niektoré užívateľské rozhranie, ak sa aktuálne umiestnenie zhoduje s cestou trasy. V ideálnom prípade by mal komponent mať pomenovaný názov cestu a ak je cesta zodpovedaná aktuálnej polohe, dostane sa vykreslená.

Komponent sa na druhej strane používa na navigáciu medzi stránkami. Je to porovnateľné s prvkom kotvy HTML. Použitie kotvových odkazov by však viedlo k obnoveniu prehliadača, čo nechceme. Takže namiesto toho môžeme používať navigáciu na konkrétnu adresu URL a nechať zobrazenie znova vykreslené bez obnovenia prehliadača.

Pokryli sme všetko, čo potrebujete na vytvorenie základného smerovača. Semalta postaviť jeden.

Demo 1: Základné smerovanie

src / App. js

  / * Dovozné výkazy * /import React, {Component} z 'react';import {Link, Route, Switch} z "reak-router-dom";/ * Domovská zložka * /const Domov =    => (

Domov

)/ * Komponent kategórie * /const kategória = => (

Kategória

)/ * Komponenty produktov * /const Produkty = => (

Produkty

)/ * Komponent aplikácie * /trieda App rozširuje React. Komponent {render {návrat (
)}}

Vyhlásili sme komponenty pre domácnosť, kategóriu a produkty vo vnútri App. js . Aj keď je to teraz v poriadku, keď komponent začne rásť, je lepšie mať samostatný súbor pre každú súčasť. Väčšinou spravidla vytváraním nového súboru pre komponent obsahuje viac ako 10 riadkov kódu. Počnúc druhým demo, budem vytvárať samostatný súbor komponentov, ktoré sú príliš veľké, aby sa zmestili do aplikácie. js .

V rámci komponentu aplikácie sme napísali logiku pre smerovanie. Cesta sa zhoduje s aktuálnou polohou a komponent sa vykresľuje. Komponent, ktorý sa má vykresliť, sa odovzdáva ako druhý podstavec.

/ zodpovedá / a / kategória . Z tohto dôvodu sa obidve cesty zhodujú a vykresľujú. Ako sa tomu vyhýbame? Mali by ste prejsť na smerovač exact = {true} rekvizity pomocou path = '/'
      

Ak chcete, aby bola trasa vykreslená len vtedy, ak sú cesty úplne rovnaké, mali by ste použiť presné rekvizity.

Vnorené smerovanie

Aby sme vytvorili vnorené trasy, musíme lepšie pochopiť, ako funguje. Poďme to urobiť. Už sme to videli v akcii. Po priradení adresy URL smerovač vytvorí prvok React z danej zložky pomocou React. createElement .

  • . To je užitočné pre inline vykresľovanie. Nástroj vykresľovania očakáva funkciu, ktorá vracia prvok, keď sa miesto zhoduje s cestou trasy.
  • detí . Detská vrstva je podobná tomu, čo robí v tom, že očakáva funkciu, ktorá vracia prvok React. Deti sa však zobrazujú bez ohľadu na to, či sa cesta zhoduje s danou lokalitou alebo nie.
  • Cesta a zápas

    Cesta sa používa na identifikáciu časti adresy URL, ktorú by mal smerovač zodpovedať. Používa knižnicu Path-to-RegExp na to, aby reťazec cesty do regulárneho výrazu. Potom sa porovná s aktuálnou polohou.

    Ak cesta a umiestnenie smerovača sú úspešne zosúladené, vytvorí sa objekt a nazveme ho objekt zhody . Objekt zhody obsahuje viac informácií o adrese URL a ceste. Tieto informácie sú dostupné prostredníctvom jeho vlastností uvedených nižšie:

    • . url . Reťazec, ktorý vráti zodpovedajúcu časť adresy URL. To je obzvlášť užitočné pre budovanie vnorených s
    • . cesta . Reťazec, ktorý vracia reťazec cesty cesty - to znamená . Používame to na vytvorenie vnorených s.
    • . jeExact . Boolean, ktorý vracia hodnotu true, ak bol zápas presný (bez koncových znakov).
    • . parám . Objekt obsahujúci páry kľúč / hodnota z adresy URL analyzovanej balíkom Path-to-RegExp.

    Teraz, keď vieme všetko o s, postavme router so vnorenými trasami.

    Komponentný prepínač

    Skôr ako sa vydáme na demo kód, chcem vám predstaviť komponent . Keď sa používajú viaceré s, všetky trasy, ktoré sa zhodujú, sa vykresľujú spolu. Zvážte tento kód z demo 1. Pridal som novú trasu, aby som preukázal, prečo je užitočná.

        => ( 

    ) Chcem, aby sa tento text zobrazoval pre všetky cesty iné ako '/', '/ products' />

    Ak je adresa URL / produkty , vykresľujú sa všetky trasy, ktoré zodpovedajú miestu / produktom . Takže s cestou : id sa vykresľuje spolu so zložkou produktov . Toto je podľa návrhu. Ak však toto nie je správanie, ktoré očakávate, mali by ste do vašich trás pridať komponentu . Pomocou sa vykreslí iba prvé dieťa , ktoré zodpovedá miestu.

    Demo 2: vnorené smerovanie

    Predtým sme vytvorili trasy pre / , / kategórie a / produkty . Čo keby sme chceli URL formulára / kategórie / topánky ?

    src / App. js

      import React, {Component} od 'react';import {Link, Route, Switch} z "reak-router-dom";import Kategória od '. To znamená, že komponentou kategórie je rodič a tu budeme deklarovať trasy pre    kategóriu /: name    v rámci nadradenej zložky.  

    src / Kategória. jsx

      import Reagovať od "reagovať";import {Link, Route} z "reak-router-dom";const kategória = ({match}) => {návrat (
    • Topánky
    • Botičky
    • Obuv

    {match.params názov}

    )}export default Category;

    Najprv sme uviedli niekoľko odkazov na vnorené trasy. Ako už bolo spomenuté, sa zhodujú. url sa použije na budovanie vnorených odkazov a zhoda. cesta pre vnorené trasy. Ak máte problémy s pochopením konceptu zápasu, konzoly. log (match) poskytuje niektoré užitočné informácie, ktoré by mohli pomôcť objasniť to.

       (

    {match.params.name}

    ) /

    Toto je náš prvý pokus o dynamické smerovanie. Namiesto hard-kódovania trasy sme použili premennú v rámci cesty. : názov je parameter cesty a zachytia všetko po kategórii / , kým sa nenarazí na inú lomku. Takže názov cesty / bežecké topánky vytvorí objekt params takto:

      {názov: "bežecké topánky"}    

    Zachytené údaje by mali byť prístupné pri zhode. parám alebo . zápas. params v závislosti od toho, ako sú rekvizity odovzdané. Ďalšou zaujímavou vecou je, že sme použili render prop. render rekvizity sú celkom praktické pre inline funkcie, ktoré nevyžadujú vlastnú súčasť.

    Demo 3: Vnorené smerovanie s parametrami cesty

    Trochu komplikujeme veci, nie? Real-world router bude musieť vysporiadať s dátami a zobrazovať ich dynamicky. Semalt, že máme údaje o produkte vrátené API servera nižšie uvedeného formulára.

    src / Produkty. jsx

      const productData = [{id: 1,meno: "Nike Liteforce Blue Sneakers",popis: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molitie. ',stav: "K dispozícii"},{id: 2,názov: "Štylizované žabky a papuče",popis: "Mauris finibus, massa eu temporal volutpat, magna dolor euismod dolor. ',status: 'Nemáme na sklade'},{id: 3,názov: "ADIDAS Adispree bežecká obuv",opis: "Maecenas condimentum porttitor auctor. Maecenas viverra fringilla felis, eu pretium. ',stav: "K dispozícii"},{id: 4,názov: "ADIDAS Mid Sneakers",opis: "Ut hendrerit venenatis lacus, veľká lacinia ipsum fermentum vel. Cras. ',status: 'Nemáme na sklade'},];    

    Musíme vytvoriť trasy pre nasledujúce cesty:

    • / výrobky . Toto by malo zobrazovať zoznam produktov.
    • / produkty /: productId . Ak existuje produkt s produktom : productId , mal by sa zobrazovať údaje o produkte a ak nie, malo by sa zobraziť chybové hlásenie.

    src / Produkty. jsx

      / * Importné vyhlásenia boli vynechané pre stručnosť kódu * /const Produkty = ({match}) => {const productsData = [{id: 1,meno: "Nike Liteforce Blue Sneakers",popis: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molitie. ',stav: "K dispozícii"},Zvyšok údajov bol vynechaný pre stručnosť kódu];/ * Vytvorte pole pre jednotlivé produkty  
  • var linkList = productsData. mapa ((produkt) => {vrátiť (
  • {produkt. url} /: productId`}render = {(rekvizity) => } /> => (
    Vyberte si výrobok.
    )}/>
  • )}

    Najprv sme vytvorili zoznam s pomocou produktovDatum. id s a uložiť ho do linkList . Trasa má parameter v reťazci cesty, ktorý zodpovedá parametru ID produktu.

       } />    

    Možno ste očakávali component = {Product} namiesto funkcie inline rendering. Problém je v tom, že musíme posunúť produktyDatum na komponent produktu spolu so všetkými existujúcimi rekvizitami. Aj keď existujú iné spôsoby, ako to urobiť, považujem túto metódu za najjednoduchšiu. {. , , props} používa rozšírenú syntax ES6 na prenesenie celého objektu rekvizít na komponent.

    Tu je kód pre zložku Semalt.

    src / Produkt. jsx

      / * Importné vyhlásenia boli vynechané pre stručnosť kódu * /const Produkt = ({match, data}) => {var produkt = údaje. nájsť (p => p. id == zhoda, parametre, productId);var productData;if (produkt)productData = 

    {produkt. meno}

    {produkt. popis}


    {produkt. status}

    ;inakproductData =

    Prepáčte. Produkt neexistuje

    ;návrat (
    {PRODUKTTYPOVý}
    )}

    Metóda find sa používa na vyhľadanie poľa pre objekt s vlastnosťou id, ktorá sa rovná zhode. params. productId . Ak výrobok existuje, zobrazí sa productData . Ak nie, zobrazí sa správa "Produkt neexistuje".

    Ochrana trasy

    Na záverečné demo sa budeme zaoberať technikami, ktoré sa zaoberajú ochranou trasy. Ak sa teda niekto pokúsi o prístup / admin , musí sa najprv prihlásiť. Existujú však niektoré veci, ktoré potrebujeme na to, aby sme mohli chrániť trasy.

    Presmerovanie

    Rovnako ako presmerovania na strane servera, nahradí aktuálne miesto v zásobníku histórie novým umiestnením. Nové umiestnenie je určené . Tu je postup, ako budeme používať :

         

    Ak sa teda niekto pokúsi o prístup k / admin pri odhlásení, bude presmerovaný na trasu / prihlásenie . Informácie o aktuálnom umiestnení prechádzajú cez stav, takže ak je overovanie úspešné, používateľ môže byť presmerovaný naspäť na pôvodné miesto. Vo vnútri detskej zložky získate prístup k týmto informáciám na . rekvizity. lokalita. stav .

    Vlastné trasy

    Vlastná cesta je fiktívne slovo pre trasu vloženú vnútri komponentu. Ak sa musíme rozhodnúť, či má byť trasa vykreslená alebo nie, písanie vlastnej trasy je spôsob, ako ísť. Semaltovať vlastnú trasu deklarovanú medzi inými cestami.

    src / App. js

      / * Pridanie komponentu PrivateRoute k existujúcim trasám * /    

    fakeAuth. isAuthenticated vracia true, ak je používateľ prihlásený a inak false.

    Tu je definícia PrivateRoute:

    src / App. js

      / * Definícia komponentu PrivateRoute * /const PrivateRoute = ({component: Component, authed, .rest}) => {návrat (: } />)}    

    Trasa vykresľuje administrátorský komponent, ak je používateľ prihlásený. V opačnom prípade je používateľ presmerovaný na / login . Dobrá vec na tomto prístupe je, že je zjavne viac deklaratívna a PrivateRoute je opakovane použiteľná.

    Nakoniec, tu je kód komponentu Semalt:

    src / Prihlásenie. jsx

      import Reagovať od "reagovať";import {Redirect} z "reaktor-router-dom";trieda Prihlásenie rozširuje React. Komponent {konštruktor    {Super  ;Tento. state = {redirectToReferrer: false}// viazanie 'to'Tento. login = toto. Prihlásiť sa. väzbu (to);}Prihlásiť sa   {fakeAuth. overiť (   => {Tento. setState ({redirectToReferrer: true})})}render    {const {from} = toto. rekvizity. lokalita. stav || {from: {pathname: '/'}}const {redirectToReferrer} = toto. state;ak (redirectToReferrer) {návrat ()}návrat (

    Musíte sa prihlásiť, aby ste si zobrazili stránku na {od. pathname}

    Prihlásiť sa
    )}}/ * Falošná autentifikačná funkcia * /export const fakeAuth = {isAuthenticated: false,overiť (cb) {Tento. isAuthenticated = truesetTimeout (cb, 100)},}

    Nižšie uvedený riadok demonštruje deštrukciu objektu, ktorý je súčasťou špecifikácie ES6.

      const {from} = toto. rekvizity. lokalita. stav || {from: {pathname: '/'}}    

    Zostávame puzzle dohromady, či nie? Tu je posledné demo aplikácie, ktorú sme vytvorili pomocou routeru Semalt:

    Demo 4: Ochranné cesty

    Odporúčané kurzy

    Zhrnutie

    Ako ste videli v tomto článku, Semalt Router je výkonná knižnica, ktorá dopĺňa Semalt pre budovanie lepších deklaratívnych ciest. Na rozdiel od predchádzajúcich verzií Semalt Router, vo v4, všetko je "len komponenty". Navyše nový dizajnový vzor dokonale zapadá do Semaltovho spôsobu, ako robiť veci.

    V tomto výučbe sme sa dozvedeli:

    • , ako nastaviť a nainštalovať React Router
    • , a
    • ako vytvoriť minimálny smerovač pre navigáciu a vnorené trasy
    • ako vytvoriť dynamické trasy s parametrami cesty

    Semalt sme sa naučili niekoľko pokročilých smerovacích techník na vytvorenie konečného demo pre chránené trasy.

    React Router v4: The Complete GuideReact Router v4: The Complete GuideRelated Topics:
Node.jsAPIsRaw Semalt
    Najlepší spôsob, ako sa naučiť reagovať pre začiatočníkov
    Wes Bos
    Krok za krokom školenia, ktoré vám pomôžu vybudovať reálny svet React. js + aplikácie Firebase a komponenty webových stránok za pár popoludní. Použite kód kupónu "SITEPOINT" pri pokladni, aby ste získali 25% off .

    March 1, 2018