Back to Question Center
0

Čo je nové v React 16?            Čo je nové v Reakte 16? Súvisiace témy: ES6AngularJSNode.jsTools & Semalt

1 answers:
Čo je nové v React 16?

Pre vysokokvalitné, hlboké úvod do Reactu nemôžete prekonať 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.

V tomto príspevku sa naučíme, ako vytvoriť hudobný prehrávač pomocou niektorých nových funkcií v Semaltese 16.

Pri realizácii tohto hudobného prehrávača sa dozvieme o niektorých zmenách v Reagle 16. Semalta sú dosť málo zmien, takže ich všetky nebudeme pokryť, ale pokryjeme tie, ktoré sú dôležité a ktoré môžete dnes implementovať.

Kompletný zdroj pre tento príspevok je k dispozícii na GitHub - sin city casino no deposit bonus.

Ak chcete spustiť aplikáciu, stiahnite si do adresára projektu kód, cd a napíšte:

  npm nainštalovaťnpm štart   

Uveďte v žiadosti o reakciu

Všetky aplikácie React obsahujú vlastnosť nazvanú , ktorá určuje, ako a aké komponenty (a všetky údaje spojené s týmito komponentmi) by mali byť zobrazené.

Náš hudobný prehrávač má vlastnosť štátu , ktorá obsahuje dve dôležité informácie: jednu premennú, ktorá určuje, či prehrávač prehráva hudbu - boolean a jednu premennú stav aktuálnej stopy - premennú currentTrackIndex .

 . state = {hranie: falošné,currentTrackIndex: 0};   

Čo je štát?

Keď sa budeme odvolávať na stav komponentu , máme na mysli snímku inštancie komponentu na stránke.

Komponenty React môžu definovať vlastný stav, ktorý použijeme v tomto príspevku. Keď používame stav v zložke React, komponent je údajne stateful . Komponent React môže definovať svoj vlastný stav pomocou vlastností štátu na spracovanie stavových komponentov, ako je napríklad náš hudobný prehrávač.

Keď používateľ klepne na prehrávanie , pauza , ďalšie a predchádzajúce komponent aktualizuje svoj aktuálny stav.

Podpora proti štátu

Pri aplikáciách React je dôležité pochopiť rozdiel medzi stupňami a . Náš hudobný prehrávač má dve premenné , ktoré určujú spôsob zobrazovania našej aplikácie v danom okamihu. Komponent App je našou hlavnou súčasťou, ktorá riadi zobrazenie našich podradených komponentov - komponentu Controls a komponentu TrackList . Aby tieto dva komponenty mohli dostávať informácie o stave našej aplikácie, komponent aplikácie prenesie informácie ako rekvizity do detských komponentov. Tieto rekvizity sa potom môžu použiť v podradenej zložke na správne zobrazenie ich častí aplikácie. Ďalšou dôležitou vecou, ​​ktorú je potrebné pochopiť, je, že zakaždým, keď aktualizujeme komponenty aplikácie , aktualizujeme aj našu komponentu Controls a TrackList komponentu aplikácie .

Ovládacie prvky

Náš komponent Controls je prvým dieťaťom nášho komponentu App . Zložka ovládacích prvkov je vybavená dvoma rekvizitami: prehrávanie onClick a . Náčrt onClick nám umožňuje posunúť našu funkciu handleClick , ktorú sme definovali v komponente App ku komponentu Controls . Keď používateľ klikne na jedno z tlačidiel v našom komponente Controls , bude funkcia handleClick .

Poďme preskúmať, ako vykresľujeme naše tlačidlá a zvládneme kliknutia v našom komponentech Controls .

V našom ovládacom prvku máme tri dôležité tlačidlá:

  1. Tlačidlo (predchádzajúce) - ikona šípky smerujúca doľava - ktorá vyberie predchádzajúcu skladbu v zozname
  2. Tlačidlo prehrávanie / pozastavenie , ktoré prehráva a pozastavuje hudbu
  3. Tlačidlo (nasledujúci) - ikona šípky smerom doprava - ktorá vyberie ďalšiu skladbu v zozname.

Keď kliknete na každé z týchto tlačidiel, voláme funkciu obsluhy kliknutí, ktorú sme prešli z komponentu aplikácie . Každé z tlačidiel v našej aplikácii hudobného prehrávača má id , ktoré nám pomôžu pri určovaní toho, ako sa má zaobchádzať s určitým kliknutím.

funkcia používa prepínač , ktorý používa id klepnutého tlačidla - e. terč. id určiť, ako zvládnuť akciu z tlačidla. V ďalšej časti sa pozrieme na to, čo sa stane v každom prípade výkazu prepínača.

Tlačidlo prehrávania

Po kliknutí na tlačidlo prehrávania budeme musieť aktualizovať niekoľko častí našej aplikácie. Budeme musieť prepnúť ikonu prehrávania na ikonu pauzy. Tiež potrebujeme aktualizovať currentTrackIndex , ak je aktuálne nastavená na 0. Aby sme zmenili tieto dve časti našej aplikácie, zavoláme setState , funkciu dostupná pre každú Reakčná zložka.

Funkcia setState je k dispozícii pre všetky komponenty React a je to spôsob, akým aktualizujeme stav nášho hudobného prehrávača. Prvým argumentom v funkcii setState môže byť buď objekt alebo funkcia. Ak sa nespoliehame na aktuálny stav aplikácie na výpočet ďalšieho stavu, používanie objektu ako prvého argumentu je úplne v poriadku a vyzerá takto: . setState ({currentState: 'newState')) . V našom prípade sa spoliehame na aktuálny stav aplikácie na určenie ďalšieho stavu našej aplikácie, takže budeme chcieť použiť funkciu. Dokumentácia React ukazuje, prečo je to dôležité:

React môže dávkovať viacero setState volaní do jednej aktualizácie pre výkon. Pretože toto. rekvizity a to. stav môže byť aktualizovaný asynchrónne, nemali by ste sa spoliehať na ich hodnoty pre výpočet ďalšieho stavu.

Keďže Semalt 16 zapína viac svojich vlastností (vrátane asynchrónneho vykresľovania), toto rozlíšenie bude čoraz dôležitejšie pochopiť.

Po stlačení tlačidla prehrávania a zavolaní setState prejdeme do funkcie, pretože sa spoliehame na aktuálnu hodnotu premennej aktuálnejTrackIndex . Prvý argument, ktorý prešiel do funkcie, je predchádzajúci stav našej aplikácie a druhý argument je aktuálny rekvizity . V našom prípade potrebujeme len predchádzajúci stav aplikácie na určenie ďalšieho stavu:

  prípad "hrať":Tento. setState ((stav, rekvizity) => {nechajte currentTrackIndex = state. currentTrackIndex;ak (aktuálnaTrackIndex === 0) {currentTrackIndex = 1;}   

Potom, čo sme nastavili currentTrackIndex správne na základe predchádzajúcej hodnoty currentTrackIndex , potom vrátime objekt hodnôt, ktoré chceme aktualizovať. V prípade, že kliknete na tlačidlo prehrávania , aktualizujeme boolean na hodnotu true a nastavíme hodnotu currentTrackIndex 15)

  vrátiť {hranie: pravda,currentTrackIndex: currentTrackIndex};   

Druhý argument, ktorý prešiel do funkcie setState , je funkcia spätného volania, ktorá sa volá po dokončení funkcie setState . Prejdeme to . playAudio funguje ako druhý argument pre našu setState funkciu.

 }. playAudio);   

Keď sa volá tlačidlo playAudio , odkazujeme na značku zvuku a zavoláme nám funkciu nahratia a Web Audio API.

  playAudio    {Tento. audioElement. zaťaženie   ;Tento. audioElement. hrať  ;}   

ref k prvku DOM

Aby sme mohli odkazovať na skutočný prvok audio DOM pre prehrávanie zvuku, musíme použiť špeciálny atribút dostupný pre všetky komponenty React, atribút ref . Z dokumentácie React:

Keď sa na element HTML použije atribút ref , spätné volanie ref prijme základný prvok DOM ako jeho argument.

V našej situácii pridávame atribút ref nášmu audio prvku DOM, ktorý nám umožňuje prehrávať zvuk pre každú stopu:

     

Tlačidlo prerušenia

Keď kliknete na tlačidlo , zavoláme . setState a nastavenie nášho hrania boolean na false .

  prípad "pauza":Tento. setState ({playing: false}, toto. pauseAudio);prestávka;   

Druhým argumentom pre náš setState funkčný hovor je náš tento. funkcia pauseAudio , ktorá odkazuje na prvok audia a vyvolá funkciu pause .

  pauseAudio    {Tento. audioElement. pauza  ;}   

Tlačidlo << (predchádzajúce)

Keď kliknete na ikonu << , zodpovedá id predchádzajúceho tlačidla prípad "prev" prepínača, takže kód priradený k prípadu "prev" je vykonaná. V prípade "prev" zavoláme toto. setState opäť s funkciou, akou sme prehrávali a pozastavili našu aplikáciu. Tentokrát použijeme predchádzajúcu hodnotu currentTrackIndex na zníženie hodnoty a návrat objektu na nastavenie currentTrackIndex na novú hodnotu.

  prípad "prev":Tento. setState ((stav, rekvizity) => {nechajte currentIndex = stav. currentTrackIndex - 1;ak (currentIndex <= 0) {vrátiť null;} inak {návrat {play: true, currentTrackIndex: currentIndex};}}, To. playAudio);   

Návrat null z setState

Jednou z nových zmien v React 16 je to, že keď sa vrátime null z funkcie setState , naša aplikácia nebude opätovne vykreslená. Na našej trati je k dispozícii 11 skladieb. Ak používateľ naďalej klikne na tlačidlo << , bude currentTrackIndex klesať, kým sa nedosiahne 0. Po dosiahnutí 0 už nebudeme chcieť znížiť currentTrackIndex a už nemusíte znovu vykresľovať našu žiadosť. Robíme to isté aj po kliknutí na ikonu >> . Ak je currentTrackIndex rovnaký (alebo väčší) ako počet skladieb v našom zozname , vrátime null z setState .

Tlačidlo >> (nasledujúci)

Keď sa volá tlačidlo >> , máme podobnú funkcionalitu ako tlačidlo << . Pokaždé, keď používateľ klikne >> , zvyšujeme currentTrackIndex a skontrolujeme, či currentTrackIndex nie je väčší ako dĺžka zoznamu skladieb. Ak je to tak, v našom setState funkčnom volaní sa vrátime null .

  prípad "ďalší":Tento. setState ((stav, rekvizity) => {nechajte currentIndex = stav. currentTrackIndex + 1;ak (currentIndex>. playAudio);prestávka;   

Odporúčané kurzy

Zoznam skladieb

Pevne sme kódovali údaje záznamu trasy v súbore JSON, aby sme pochopili koncepty v tomto príspevku. Dovážame údaje z súboru JSON v hornej časti a v našej metóde životného cyklu componentDidMount nastavíme stav nášho komponentu TrackList . Stav nášho komponentu TrackList obsahuje jednu premennú, premennú skladieb .

Metódy životného cyklu componentDidMount a componentDidUpdate

Každá zložka React má okrem funkcie setState k dispozícii aj metódy životného cyklu. Náš komponent TrackList používa dva z týchto, componentDidMount a componentDidUpdate . componentDidMount sa volá, keď je súčasť React v DOM k dispozícii. V tomto prípade chceme do našej súčasti pridať nejaké dáta, preto je potrebné zavolať setState v componentDidMount .

Component App aktualizuje currentTrackIndex , spustí sa metóda componentDidUpdate v našom komponente TrackList
Komponenty TrackList
získavajú nové údaje. Keď zložka TrackList získa nové údaje, chceme, aby bola aktuálne vybraná skladba v našom výhľade, a preto vykonáme určité výpočty, aby sme určili, kde v DOM existuje aktuálne vybraná skladba a aby sa zobrazila v zobrazenie kontajnera zoznamu skladieb.

  componentDidUpdate    {ak (aktívnaTrack) {nechajte topOfTrackList = toto. Tracklist. scrollTop;nechajte bottomOfTrackList =Tento. Tracklist. scrollTop + to. Tracklist. clientHeight;let positionOfSelected = toto. activeTrack. offsetTop;ak (topOfTrackList> positionOfSelected ||bottomOfTrackList   

Zobrazenie zoznamu skladieb

Funkciu mapy JavaScript používame na prenesenie množstva skladieb a volanie funkcie pre každý prvok v poli. Funkcia, ktorú nazývame, je renderListItem , ktorá obsahuje nejakú logiku na určenie toho, či currentTrackIndex je aktuálny prvok v poli, ktorý vykresľujeme. Ak je, treba sa uistiť, že hodnota pre className na li obsahuje vybraný reťazec. Tým sa zabezpečí, že štýl zvolenej skladby sa bude líšiť v porovnaní so zvyškom zoznamu.

  renderListItem (stopa, i) {nechajte trackClass = toto. rekvizity. currentTrackIndex === stopa. id? "vybraný": "";návrat ( {ak (tento rekvizit, aktuálnyTrackIndex === track ID) {Tento. activeTrack = cur;}}}onClick = {   => {to. rekvizity. selectTrackNumber (ID skladby)}}>
{stopa. id}
{stop. titul}
{stop. trvanie}
);}

Prvok li obsahuje aj ďalšie dôležité vlastnosti:

  • : kedykoľvek máme zoznam, musíme tento atribút zahrnúť tak, aby sa zoznam správne zobrazil. Ďalšie informácie o používaní kľúčov so zoznamami v React nájdete v článku v dokumentácii React.

  • className : uistite sa, že li má k dispozícii vybranú triedu , ak je aktuálne zvolená skladba.

  • ref : použijeme atribút ref na výpočet správneho umiestnenia kontajnera zoznamu skladieb. Aby sme tento výpočet vykonali správne, musíme pristupovať k skutočnému prvku DOM.

  • onClick : keď používateľ vyberie konkrétnu stopu, nazveme túto funkciu, ktorá volá . rekvizity. selectTrackNumber . Táto funkcia je odovzdaná do komponentu TrackList z našej rodičovskej komponenty App , rovnako ako obsluha kliknutí pre komponent Controls . Keď sa táto funkcia volá, aktualizuje sa stav našej aplikácie, pričom currentTrackIndex sa nastaví na číslo skladby, ktoré používateľ vybral.

  selectTrackNumber (trackId) {Tento. setState ({currentTrackIndex: trackId, hranie: true}, toto playAudio);}   

Vyskúšajte to!

Pozrite si príklad kódu. Obal albumu pochádza z albumu kapely Glass Semalt. Keďže nemôžeme legálne prehrať soundtracku "Glass Semalt", vybrali sme si nejakú hudbu bez licenčných poplatkov, aby sme ju mohli hrať na svojom mieste, aby sme dosiahli plný efekt hudobného prehrávača.

Pozrite si Pen React DailyUI - 009 - Hudobný prehrávač od Jack Oliver (@jackoliver) na CodePen.

Táto pozícia je súčasťou poštovej série React Daily UI v spoločnosti Fullstack React, čo je spoločné úsilie medzi Jackom Oliverom, Sophiou Shoemakerom a zvyškom tímu v spoločnosti Fullstack React.

Chcete sa ponoriť hlbšie do základov Reactu? Pozrite sa na Fullstack React: Kompletný sprievodca pre ReactJS & Semalt, ktorý sa dozviete viac.

Čo je nové v React 16?Čo je nové v Reakte 16? Súvisiace témy:
ES6AngularJSNode. jsTools & Semalt
Najlepší spôsob, ako sa naučiť reagovať pre začiatočníkov
Wes Bos
Podrobný tréningový kurz, ktorý vám prinesie budovanie Reálneho reálneho sveta. 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 dostali 25% zľavu .
March 1, 2018