Back to Question Center
0

React Router v4: Täydellinen opas            React Router v4: Täydellinen opasRelated Topics: Node.jsAPIsRaw Semalt

1 answers:
React Router v4: Täydellinen opas

Reactin korkealaatuiselle ja syvälliselle käyttöönotolle et voi ohittaa kanadalaista täyspinoa kehittäjä Wes Bosia. Kokeile kurssia täällä ja käytä koodia SITEPOINT saadaksesi 25% ja avustamaan SitePointia.

React Semalt on Reactin de facto standardi reitityskirjasto - βιταμινες lanes για παιδια. Kun haluat selata React-sovellusta, jossa on useita näkymiä, sinun on hallittava URL-osoitteita reitittimellä. React Semalt huolehtii siitä, pidä sovelluksesi käyttöliittymää ja URL-osoitetta synkronoituna.

Tämä opetusohjelma esittelee sinut React Semalt v4: lle ja paljon asioita, joita voit tehdä sen kanssa.

Johdanto

React on suosittu kirjasto, jolla luodaan yksipuolisia sovelluksia (SPA), jotka toimivat asiakkaan puolella. SPA: llä voi olla useita näkymiä (aka sivua ), ja toisin kuin perinteiset monisivuiset sovellukset, navigointi näiden näkymien välillä ei saisi johtaa koko sivun lataamiseen. Sen sijaan haluamme, että näkymät näytetään nykyisen sivun sisällä. Loppukäyttäjä, joka tottuu monisivuisiin sovelluksiin, odottaa, että SPA: ssä on seuraavat toiminnot:

  • Jokaisessa hakemuksessa on oltava URL-osoite, joka yksilöi kyseisen näkymän yksilöllisesti. Tämä on niin, että käyttäjä voi kirjanmerkin URL-osoitteen viitattaessa myöhemmin - e. g. www. esimerkki. com / tuotteet .
  • Selaimen taakse- ja eteenpäin-painikkeen pitäisi toimia odotetusti.
  • Dynaamisesti syntyneiden sisäkkäisten näkymien pitäisi mieluimmin olla myös oma URL-osoite - e. g. esimerkki. com / products / shoes / 101 , jossa 101 on tuotteen tunnus.

Reititys on prosessi, jolla selaimen URL-osoite säilytetään synkronoidusti sen kanssa, mitä sivulle tehdään. React Router avulla voit käsitellä reititystä ilmoituksellisesti . Declarative reititys -menetelmällä voit ohjata tietovirtaa sovelluksessasi sanomalla "reitin pitäisi näyttää tältä":

      

Voit sijoittaa -komponentin missä tahansa reitilläsi. Koska , ja kaikki muu React Router API, josta käsittelemme, ovat vain komponentteja, voit reagoida helposti Reactiin.

Huomautus ennen aloittamista. Yleinen väärinkäsitys on se, että React Semalt on Facebookin kehittämä virallinen reititysratkaisu. Todellisuudessa se on kolmannen osapuolen kirjasto, joka on laajalti suosittu sen suunnittelusta ja yksinkertaisuudesta. Jos vaatimukset rajoitetaan reitittimiin navigointiin, voit toteuttaa mukautetun reitittimen tyhjästä ilman paljon vaivaa. Kuitenkin ymmärrys siitä, miten React Semaltin perusteet antavat sinulle paremmat käsitykset siitä, miten reitittimen pitäisi toimia.

Yleisnäkymä

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

  1. navigoinnin perusohjaus
  2. sisäkkäinen reititys
  3. sisäkkäinen reititys polun parametreilla
  4. suojattu reititys

Kaikkien näiden reittien rakentamiseen liittyvät käsitteet tullaan käsittelemään matkan varrella. Projektin koko koodi on saatavilla tällä GitHub-reposilla. Kun olet tietyn demo-hakemiston sisällä, suorita npm asentaa riippuvuuksien asentamiseen. Jos haluat palvella sovellusta kehityspalvelimella, suorita npm start ja siirry osoitteeseen http: // localhost: 3000 / nähdäksesi demo toiminnassa.

Epäonnistuminen alkaa!

Reaktorin reitittimen asettaminen

Oletan, että sinulla on jo kehitysympäristö. Jos näin ei ole, siirry kohtaan "React and JSX: n käytön aloittaminen". Vaihtoehtoisesti voit luoda React-sovelluksen avulla luoda tarvittavat tiedostot React-projektin luomiseen. gitignore├── paketti. json├── julkinen│ ├── favicon. ICO│ ├── indeksi. html│ └── manifestti. json├── README. md├── src│ ├── App. css│ ├── App. js│ ├── App. testata. js│ ├── indeksi. css│ ├── indeksi. js│ ├── logo. svg│ └── registerServiceWorker. js└── lanka. Lukko

React Router -kirjasto käsittää kolme pakettia: reaktori-reititin , reaktori-reititin-dom ja reaktori-reititin-natiivi . reaktori on reitittimen ydinpaketti, kun taas kaksi muuta ovat ympäristötietoisia. Käytä reaktori-reitittimen-dom , jos rakennat verkkosivustoa ja reagoivat reitittimeen , jos olet mobiilisovelluksen kehitysympäristössä React Native -ohjelmassa.

Käytä npm asentaa reaktori-reititin-dom :

    npm asenna --save react-router-dom    

Reaktori reitittimen perusteet

Selvitä esimerkki siitä, miten reitimme näyttävät:

      

Reititin

Tarvitset reititinkomponentin ja useita reittikomponentteja perustavan reitin määrittelemiseksi edellä esimerkkinä. Koska rakennamme selainpohjaista sovellusta, voimme käyttää React Router API: n kautta kahta eri reitittimen tyyppiä:

Ensisijainen ero niiden välillä on näkyvissä niiden luomissa URL-osoitteissa:

  // http: // esimerkki. com / noin// http: // esimerkki. com / # / noin    

on suosituin näistä kahdesta, koska se käyttää HTML5 History API: tä seurata reitittimen historiaa. Sen sijaan käyttää URL-osoitteen sijaintia, hash , hash-osaa muistiin asioita. Jos aiot tukea vanhoja selaimia, kannattaa noudattaa .

Kierrä komponentti App-komponentin ympärille.

indeksiin. js

  / * Tuonti-ilmoitukset * /tuonti Reagoi "reagoi";tuoda ReactDOM: n "react-dom": sta;/ * Sovellus on React-koodin tulopiste. * /tuoda App from '. /Sovellus';/ * tuoda BrowserRouter 'react-router-dom' * /tuoda {BrowserRouter} osoitteesta react-router-dom;ReactDOM. tehdä (, asiakirja. getElementById ( 'root'));    

Huomaa: Reitittimen komponenttilla voi olla vain yksi lapsielementti. Lapsielementti voi olla HTML-elementti - kuten div - tai reagoiva komponentti.

Jotta React-reititin toimisi, sinun on tuettava asiaa koskeva API reaktori-reititin-dom -kirjastosta. Tässä olen tuonut BrowserRouterin indeksiin . js . Olen myös tuonut App -komponentin sovelluksesta. js . App. js , kuten olette arvannut, on React-komponenttien lähtökohde.

Edellä oleva koodi luo historiatiedoston koko App-komponentille. Anna minun virallisesti esitellä teille historiaa.

historiaa

historia on JavaScript-kirjasto, jonka avulla voit helposti hallita istuntohistoriaa missä tahansa JavaScript-suorituksessa. historia tarjoaa minimaalisen sovellusliittymän, jonka avulla voit hallita historiapinoa, navigoida, vahvistaa navigointi ja jatkaa tilan istuntojen välillä. - React Training docs

Jokainen reititinkomponentti luo historiaobjektin, joka seuraa nykyistä sijaintia historiaa ja myös aikaisempia paikkoja pinossa. Miten nykyinen sijainti muuttuu? Historiaobjektissa on menetelmiä, kuten historia. push ja historia. korvata huolehtia siitä. historiaa. push kutsutaan, kun napsautat osaa ja historiaa. replace kutsutaan, kun käytät . Muut menetelmät - kuten historia. goBack ja historia. goForward - käytetään siirtymään historiapinoon siirtymällä tai eteenpäin sivulle.

Siirtymällä meillä on linkkejä ja reittejä.

Linkit ja reitit

-komponentti on React-reitittimen tärkein osa. Se tekee käyttöliittymästä, jos nykyinen sijainti vastaa reitin polkua. Ihannetapauksessa -komponentilla pitäisi olla prop-niminen polku , ja jos polunimi vastaa nykyistä sijaintia, se saa renderoitua.

-komponenttia käytetään sen sijaan navigoimaan sivujen välillä. Se on verrattavissa HTML-ankkurielementtiin. Ankkuriyhteyksien käyttäminen johtaisi selaimen päivitykseen, jota emme halua. Sen sijaan voimme käyttää navigoimalla tiettyyn URL-osoitteeseen ja katselemaan uudelleen ilman selainpäivitystä.

Olemme keränneet kaiken, mitä tarvitset tietää luoda perusreititin. Semalt rakentaa yhden.

Esittely 1: perusreititys

src / App. js

  / * Tuonti-ilmoitukset * /tuonti Reagoi, {Komponentti} "reagoi";tuoda {linkki, reitti, kytkin} reititys-reitittimestä-dom;/ * Kotikone * /const Koti =    => (

koti

)/ * Luokka-osa * /const Luokka = => (

Luokka

)/ * Tuotteen komponentti * /const Tuotteet = => (

Tuotteet

)/ * Sovelluskomponentti * /luokan App laajentaa React. Komponentti {render {palautus (
)}}

Olemme ilmoittaneet komponentit kodin, luokan ja tuotteiden sisällä App. js . Vaikka tämä onkin jo nyt, kun komponentti alkaa kasvaa, on parempi, että jokaiselle komponenttille on erillinen tiedosto. Pääsääntöisesti luon tavallisesti uuden tiedoston komponenttia varten, jos se kattaa yli 10 riviä koodia. Toisesta demosta alkaen luen erillisen tiedoston komponenteille, jotka ovat kasvaneet liian suureksi, jotta ne sopisivat sovellukseen. js tiedosto.

App-komponentin sisällä olemme kirjoittaneet reitityksen logiikan. : n polku on sovitettu nykyisen sijainnin kanssa ja komponentti saa renderoitua. Komponentti, joka tulisi tehdä, siirretään toiseksi propeksi.

Tässä / vastaa molempia / ja / kategoriaa . Siksi molemmat reitit on sovitettu ja renderoitu. Miten vältämme sen? path = '/' :

siirrä reitittimeen tarkka = {true}
      

Jos haluat, että reitti voidaan tehdä vain, jos polut ovat täsmälleen samat, käytä tarkkoja rekistereitä.

Asennetut reitit

Sisäkkäisten reittien luomiseksi meidän on ymmärrettävä paremmin, miten toimii. Tehdään niin. Olemme jo nähneet tämän toiminnassa. Kun URL-osoite on sovitettu, reititin luo React-elementin tietystä komponentista käyttäen React. createElement .

  • tekee . Tämä on kätevä sisäisessä renderöinnissä. Render prop odottaa funktiota, joka palauttaa elementin, kun sijainti vastaa reitin polkua.
  • lapsia . Lapsilukko on samanlainen kuin tekee, koska se odottaa funktiota, joka palauttaa React-elementin. Lapset saavat kuitenkin piirtää riippumatta siitä, sovitetaanko polku sijaintiin vai ei.
  • Polku ja ottelu

    Reitin avulla tunnistetaan URL-osoitteen osa, jonka reitittimen tulisi vastata. Se käyttää Path-to-RegExp-kirjastoa kääntämään polkujono säännölliseksi lausekkeeksi. Sen jälkeen se sopii nykyiseen sijaintiin.

    Jos reitittimen polku ja sijainti on onnistuneesti sovitettu, luodaan objekti ja me kutsumme sitä match -objektiksi. Haun esine sisältää enemmän tietoja URL-osoitteesta ja polusta. Nämä tiedot ovat saatavilla sen alla luetelluista ominaisuuksista:

    • ottelu. url . Merkkijono, joka palauttaa URL-osoitteen vastaavan osan. Tämä on erityisen hyödyllistä sisäkkäisten s
    • ottelu. polku . Merkki, joka palauttaa reitin polun merkkijono - eli . Käytämme tätä rakennettaessa sisäkkäisiä s.
    • ottelu. isExact . Boolean, joka palauttaa tosi, jos ottelu oli tarkka (ilman jäljelle jääviä merkkejä).
    • ottelu. params . Path-to-RegExp-paketin jäsentämästä URL-osoitteesta avaimen / arvon parien sisältävä objekti.

    Nyt kun tiedämme kaikki s, rakentamme reitittimen, jossa on sisäkkäiset reitit.

    Kytkinosa

    Ennen kuin aloitamme demokoodin, haluan esitellä sinulle -komponentin. Kun useampaa s käytetään yhdessä, kaikki reitit, jotka vastaavat, tehdään mukaanlukien. Tarkastele tätä koodia demosta 1. Olen lisännyt uuden reitin osoittamaan, miksi on hyödyllinen.

      Haluan tämän tekstin näyttävän kaikille muille kuin "/", "/ products" ja "/ category"  

    )} />

    Jos URL-osoite on / tuotteet , kaikki sijainnit / tuotteet vastaavat reitit tehdään. Joten, , jossa on polku : id , saadaan yhdessä Products -komponentin kanssa. Tämä on suunniteltu. Jos tämä ei kuitenkaan ole odottamasi käyttäytyminen, lisää komponentti reitteihisi. Kanssa vain ensimmäinen lapsi , joka vastaa sijaintia, saadaan suoritetuksi.

    Esittely 2: sisäkkäinen reititys

    Aiemmin luotiimme reittejä / , / ryhmä ja / tuotteet . Mitä jos halusimme lomakkeen / luokka / kengät URL-osoitteen?

    src / App. js

      tuonti Reagoi, {Komponentti} "reagoi";tuoda {linkki, reitti, kytkin} reititys-reitittimestä-dom;tuonti Luokka ". Eli luokkakomponentti on vanhempi täällä, ja ilmoitamme reittien    luokan /: nimi    reitille emokomponentin sisällä.  

    src / luokka. jsx

      tuonti Reagoi "reagoi";tuoda {Link, Route} reititys-reitittimestä-dom;const Luokka = ({match}) => {paluu (
    • Jalkineet
    )} /> {/
    )}viedä oletusluokka;

    Ensin olemme ilmoittaneet pari linkkiä sisäkkäisille reiteille. Kuten edellä mainittiin, ottelu. url: tä käytetään sisäkkäisten linkkien rakentamiseen ja otteluun. polku sisäkkäisiin reitteihin. Jos sinulla on vaikeuksia ymmärtää ottelun käsite, konsoli. log (match) sisältää joitain hyödyllisiä tietoja, jotka voisivat auttaa selventämään sitä.

       (

    {match params. name}

    )}

    Tämä on ensimmäinen yritys dynaamisessa reitityksessä. Sen sijaan, että reitit koodattiin kovasti, käytimme muuttujaa polun nimessä. : nimi on polun parametri ja saalis kaikki jälkeen luokkaan / , kunnes toinen eteenpäin viiste kohdataan. Joten polku tuotteet / juoksukengät luo parametreja seuraavasti:

      {nimi: 'juoksukengät'}    

    Vangittujen tietojen on oltava saatavilla ottelussa. params tai rekvisiitta. ottelu. parametrejä riippuen siitä, miten rekvisiot ohjataan. Toinen mielenkiintoinen asia on, että olemme käyttäneet render prop. esittävät rekvisiitta ovat melko käteviä inline-funktioille, jotka eivät vaadi omaa osaa.

    Esittely 3: Sisäkkäiset reitit Path-parametreilla

    Tehdään monimutkaisemme asioita hieman, eikö me? Todellisen reitittimen on käsiteltävä tietoja ja näytettävä ne dynaamisesti. Epäilen, että alla olevan lomakkeen palvelinliittymän tuottamat tuotetiedot ovat palautuneet.

    src / Tuotteet. jsx

      const productData = [{id: 1,nimi: 'NIKE Liteforce Blue Sneakers',kuvaus: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin-harha. ',tila: "Saatavilla"},{id: 2,nimi: 'Stylized Flip Flops ja Tossut',kuvaus: "Mauris finibus, massa eu tempora volutpat, magna dolor euismod dolor. ',tila: 'Varastossa'},{id: 3,nimi: 'ADIDAS Adispree Running Shoes',kuvaus: "Maecenas condimentum porttitor auctor. Maecenas viverra fringilla felis, eu pretium. ',tila: "Saatavilla"},{id: 4,nimi: 'ADIDAS Mid Sneakers',kuvaus: "Viherkasvi on lacus, vel lacinia ipsum fermentum vel. Luottoluokituslaitokset. ',tila: 'Varastossa'},];    

    Meidän on luotava reittejä seuraaville reiteille:

    • / tuotteet . Tämän pitäisi näyttää luettelo tuotteista.
    • / tuotteet /: tuoteId . Jos tuote : productId on olemassa, sen on näytettävä tuotetietoja, ja jos ei, sen pitäisi näyttää virheilmoitus.

    src / Tuotteet. jsx

      / * Tuonti-ilmoitukset on jätetty pois koodiluettelon vuoksi * /const Tuotteet = ({match}) => {const productsData = [{id: 1,nimi: 'NIKE Liteforce Blue Sneakers',kuvaus: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin-harha. ',tila: "Saatavilla"},// Muuta tietoa on jätetty koodin lyhennettä varten];/ * Luo joukko ` 
  • ` kohteita jokaiselle tuotteellevar linkList = productsData. kartta ((tuote) => {palata(
  • {tuote. url} /: productId`}render = {(rekvisiitta) => } /> => (
    Valitse tuote.
    )}/>
  • )}

    Ensin luotiin luettelo s käyttäen productsDataa. id s ja tallennetaan se linkList . Reitti ottaa parametrin polun merkkijonoon, joka vastaa tuotetunnusta.

       } />    

    Olet ehkä odottanut component = {Product} inline-renderointitoiminnon sijaan. Ongelmana on, että meidän on siirrettävä productsData Product-komponenttiin sekä kaikki olemassa olevat rekvisiitta. Vaikka sinulla on muitakin tapoja tehdä tämä, mielestäni tämä menetelmä on helpoin. { rekvisiitta} käyttää ES6: n leviämissyntaksia siirtää koko rekvisiittaobjektin komponenttiin.

    Tässä on koodi Semalt -komponentille.

    src / tuote. jsx

      / * Tuonti-ilmoitukset on jätetty pois koodiluettelon vuoksi * /const Tuote = ({match, data}) => {var tuote = data. löytää (p => p id == match params. productId);var productData;jos (tuote)productData = 

    {tuote. nimi}

    {tuote. kuvaus}

    {tuote. status}

    ;muuproductData =

    Anteeksi. Tuotetta ei ole

    ;palautus (
    {ProductData}
    )}

    find -menetelmää käytetään etsimään taulukkoa objektille, jonka id-ominaisuus on yhtä suuri kuin . parametrien. productId . Jos tuote on olemassa, näyttöön tulee productData . Jos ei ole, "Tuotetta ei ole olemassa" -viesti on tehty.

    Suojausreitit

    Lopullisen esittelyn osalta keskustelemme tekniikoista, jotka koskevat reittien suojaamista. Joten, jos joku yrittää käyttää / admin , he joutuvat kirjautumaan sisään ensin. On kuitenkin joitain asioita, joita meidän on katettava ennen kuin voimme suojautua reiteiltä.

    uudelleenohjaus

    Kuten palvelinpuolen uudelleenohjaukset, korvaa nykyisen sijainnin historiapinoon uudella sijainnilla. Uusi paikka on määritelty - prop. Näin käytämme :

         

    Jos joku yrittää käyttää / admin kirjautuessaan ulos, heidät ohjataan reitti / login . Tietoja nykyisestä sijainnista välitetään valtion kautta, joten jos todennus onnistuu, käyttäjä voidaan ohjata takaisin alkuperäiseen paikkaan. Lapsikomponentin sisällä voit käyttää tätä tietoa kohdassa . rekvisiitta. sijainti. tila .

    Mukautetut reitit

    Mukautettu reitti on hieno sana reitille, joka on sisäpuolella komponentin sisällä. Jos meidän on tehtävä päätös siitä, onko reitti tehtävä vai ei, on tapa kirjoittaa reittiä. Muokkaa reittiä ilmoitettu reitti.

    src / App. js

      / * Lisää PrivateRoute-komponentti olemassa oleviin reitteihin * /    

    fakeAuth. isAuthenticated palauttaa true, jos käyttäjä on kirjautunut sisään ja väärä muuten.

    Tässä on määritelmä PrivateRoutelle:

    src / App. js

      / * PrivateRoute -komponentin määrittely * /const YksityinenRoute = ({komponentti: Komponentti, authed,. rest}) => {palautus (: } />)}    

    Reitti tekee Admin-komponentin, jos käyttäjä on kirjautunut sisään. Muussa tapauksessa käyttäjä ohjataan uudelleen / kirjautumiseen . Hyvä lähestymistapa on se, että se on ilmeisesti selkeämpi ja PrivateRoute on uudelleenkäytettävissä.

    Lopuksi tässä on Semalt -komponentin koodi:

    src / Kirjautuminen. jsx

      tuonti Reagoi "reagoi";tuonti {uudelleenohjaus} reititys-reitittimestä-dom;class Kirjaudu sisään jatkaa React. Komponentti {konstruktori    {Super   ;Tämä. tila = {redirectToReferrer: false}// sitova "tämä"Tämä. login = tämä. Kirjaudu sisään. sitoa (tämä);}Kirjaudu sisään   {fakeAuth. todentaa (   => {Tämä. setState ({redirectToReferrer: true})})}render    {const {from} = tämä. rekvisiitta. sijainti. valtio || {lähtien {pathname: '/'}}const {redirectToReferrer} = tämä. osavaltio;jos (redirectToReferrer) {palautus ()}palautus (

    Sinun on kirjauduttava katsomaan sivua osoitteesta {from. polku}}

    )}}/ * Fake authentication function * /vienti const fakeAuth = {isAuthenticated: false,todentaa (cb) {Tämä. isAuthenticated = truesetTimeout (cb, 100)},}

    Alla oleva viiva osoittaa esineen uudelleenjärjestelyä, joka on osa ES6-määritystä.

      const {from} = tämä. rekvisiitta. sijainti. valtio || {lähtien {pathname: '/'}}    

    Asennetaan palapelin palat yhteen, vai mitä? Tässä on lopullinen demo sovelluksesta, jonka rakentamme Semalt -reitittimellä:

    Esittely 4: Suojausreitit

    Suositellut kurssit

    Yhteenveto

    Kuten tässä artikkelissa olette nähnyt, Semalt Router on tehokas kirjasto, joka täydentää Semaltia parempien ja julistevien reittien rakentamiseen. Toisin kuin ennen Semalt Router -versioita, v4: ssä kaikki ovat "vain komponentteja". Lisäksi uusi suunnittelukuvio sopii täydellisesti Semaltin tapaan tehdä asioita.

    Tässä oppitunnissa opimme:

    • miten asentaa ja asentaa React reititin
    • , ja
    • miten luodaan minimi reititin navigointiin ja sisäkkäisiin reitteihin
    • miten rakentaa dynaamisia reittejä polkuparametreilla

    Semalt, opimme kehittyneitä reititysmenetelmiä lopullisen demo-ohjelman luomiseksi suojatuille reiteille.

    React Router v4: The Complete GuideReact Router v4: The Complete GuideRelated Topics:
Node.jsAPIsRaw Semalt
    Paras tapa oppia reagoida aloittelijoille
    Wes Bos
    Vaiheittainen harjoitus, jonka avulla voit rakentaa reaalimaailman React. js + Firebase-sovelluksia ja verkkosivuston osia pari iltapäivää. Käytä kuponkikoodia 'SITEPOINT' kassalla saadaksesi 25% .

    February 28, 2018