Back to Question Center
0

Co je nového v React 16?            Co je nového v React 16? Související témata: ES6AngularJSNode.jsTools & Semalt

1 answers:
Co je nového v React 16?

Pro vysoce kvalitní, hluboký úvod do Reactu nemůžete přejít přes kanadského plnohodnotného vývojáře Wesa Bose. Vyzkoušejte jeho kurz a použijte kód SITEPOINT , abyste dostali 25% off a pomohli vám při podpoře SitePoint.

V tomto příspěvku se dozvídáme, jak vytvořit hudební přehrávač pomocí některých nových funkcí v Semaltu 16.

Při realizaci tohoto hudebního přehrávače se dozvídáme o některých změnách v Reaktu 16 - mailchimp php api add subscriber. Semalta jsou poměrně málo změn, takže nebudeme pokrývat všechny, ale pokryjeme ty, které jsou důležité a které můžete dnes implementovat.

Kompletní zdroj pro tento příspěvek je k dispozici na GitHubu.

Chcete-li spustit aplikaci, stáhněte si kód cd do adresáře projektu a zadejte:

     instalace npmnpm start    

Uveďte v žádosti o reakci

Všechny aplikace React obsahují vlastnost nazvanou , která určuje, jak a jaké komponenty (a všechna data spojená s těmito součástmi) by měla být zobrazena.

Náš hudební přehrávač má state vlastnost, která obsahuje dvě důležité informace: jednu proměnnou určující, zda přehrávač přehrává hudbu - boolean stav aktuální stopy - proměnnou currentTrackIndex .

     toto. state = {hraní: falešné,currentTrackIndex: 0};    

Co je stát?

Když se odkazujeme na stav komponenty , máme na mysli snímek instance komponenty na stránce.

Součásti Reactu mohou definovat svůj vlastní stav, který budeme v tomto příspěvku používat. Když použijeme stav v komponentě React, je údajná složka stateful . Komponent React může definovat svůj vlastní stav pomocí vlastností pro manipulaci se stavovými součástmi, jako je náš hudební přehrávač.

Jakmile uživatel klepne na tlačítka přehrávání , pauza , další a bude aktualizovat svůj aktuální stav.

Props vs State

Pro aplikace React je důležité pochopit rozdíl mezi stavem a . Náš hudební přehrávač má dvě stavové proměnné, které určují způsob zobrazení naší aplikace v daném okamžiku. Komponenta App je naší hlavní komponentou, která řídí zobrazení našich podřízených komponent - komponenty Controls a TrackList . Aby tyto dva komponenty mohly přijímat informace o stavu naší aplikace, komponent App předá informace jako dolů k dětským komponentům. Tyto podpěry lze potom použít v podřízené součásti, aby správně zobrazovaly své části aplikace. Další důležitou věcí, kterou je třeba pochopit, je, že pokaždé, když se naše aktualizace App aktualizují, aktualizujeme také náš komponent Controls a komponentu TrackList komponentu App .

Ovládací prvky

Náš komponent Controls je prvním dítětem našeho komponentu App . Komponenta ovládacích prvků má dvě podpěry: přehrávání onClick a . Nápověda onClick nám umožňuje předat funkci handleClick , kterou jsme definovali v komponentě App komponentě Controls . Když uživatel klikne na jedno z tlačítek v našem komponentě Ovládací prvky , bude volána funkce handleClick .

Podívejme se na to, jak vykreslujeme tlačítka a zvládneme kliknutí v našem komponentě Controls .

V našem ovládacím prvku máme tři důležité tlačítka:

  1. Tlačítko (předchozí) - ikona šipky směřující doleva, která vybírá předchozí skladbu v seznamu
  2. Tlačítko přehrávání / pauzy , které přehrává a pozastavuje hudbu
  3. Tlačítko >> (další) - ikona šipky směřující doprava - která vybere další skladbu v seznamu.

Když kliknete na každé z těchto tlačítek, zavoláme funkci komponenty App , kterou jsme předali. Každé z tlačítek v naší aplikaci pro přehrávač hudby má id , který nám pomůže při určování, jakým způsobem by se mělo jednat o určité kliknutí.

V interní části funkce handleClick používáme příkaz přepínač , který používá id tlačítka, které bylo klepnuto - 27. cílová. id , abyste zjistili, jak zvládnout akci pomocí tlačítka. V další části se podíváme, co se děje v každém případě příkazu switch.

Tlačítko přehrávání

Po kliknutí na tlačítko přehrávání budeme muset aktualizovat několik částí naší aplikace. Budeme muset přepnout ikonu přehrávání na ikonu pauzy. Budeme také muset aktualizovat currentTrackIndex , pokud je aktuálně nastaven na hodnotu 0. Abychom tyto dvě části naší aplikace mohli změnit, zavoláme setState , která je k dispozici všem Reaktivní součást.

Funkce setState je k dispozici všem komponentám React a je to jak aktualizujeme stav našeho hudebního přehrávače. První argument v setState funkce může být buď objekt nebo funkce. Pokud se nespoléháme na aktuální stav aplikace pro výpočet dalšího stavu, použijeme objekt jako první argument a je to dokonale jemný přístup a vypadá takto: . setState ({currentState: 'newState'}) . V našem případě se spoléháme na aktuální stav aplikace a určujeme další stav naší aplikace, takže budeme chtít použít funkci. Dokumentace React uvádí, proč je to důležité:

React může dávkovat více setState volání do jedné aktualizace pro výkon. Protože toto. rekvizity a . stav může být aktualizován asynchronně, neměli byste spoléhat na jejich hodnoty pro výpočet dalšího stavu.

Vzhledem k tomu, že Semalt 16 zapne více vlastností (včetně asynchronního vykreslování), bude toto rozlišení více důležité pochopit.

Když stiskneme tlačítko Play a zavoláme setState , předáme funkci, protože se spoléháme na aktuální hodnotu stávající proměnné currentTrackIndex . První argument, který byl předán do funkce, je předchozí stav naší aplikace a druhý argument je aktuální rekvizity . V našem případě potřebujeme pouze předchozí stav aplikace k určení dalšího stavu:

     případ "hra":tento. setState (stav, rekordy) => {nechat currentTrackIndex = stát. currentTrackIndex;pokud (currentTrackIndex === 0) {currentTrackIndex = 1;}}    

Jakmile jsme nastavili currentTrackIndex správně na základě předchozí hodnoty currentTrackIndex , pak vrátíme objekt hodnot, které chceme aktualizovat. V případě, že klepnete na tlačítko , aktualizujeme naše hrací boolean na true a nastavíme hodnotu currentTrackIndex 15)

     vrátí {hraní: pravda,currentTrackIndex: currentTrackIndex};    

Druhý argument, který je předán do funkce setState , je funkce zpětného volání, která se nazývá po dokončení funkce setState . Procházíme to . playAudio funguje jako druhý argument pro naši funkci setState .

    }. playAudio);    

Když je voláno tlačítko playAudio , odkazujeme na značku zvuku a voláme funkce a přehrávání rozhraní API Web Audio.

     playAudio    {tento. audioElement. zatížení  ;tento. audioElement. hrát si  ;}}    

ref k prvku DOM

Chcete-li odkazovat na skutečný prvek audio DOM pro přehrávání zvuku, musíme použít speciální atribut dostupný pro všechny komponenty React, atribut ref . Z dokumentace React:

Když je prvek ref použit na elementu HTML, zpětné volání obdrží jako svůj argument příslušný prvek DOM.

V naší situaci přidáme atribut ref k našemu prvku audio DOM, který nám umožňuje přehrávat zvuk pro každou stopu:

         

Tlačítko pozastavení

Když stisknete tlačítko pauza , zavoláme . setState a nastavíme naše hraní boolean na false .

     případ "pauza":tento. setState ({playing: false}, toto. pauseAudio);přestávka;    

Druhým argumentem pro naše funkce setState je naše toto. funkce pauseAudio , která odkazuje na element a volá funkci pause .

     pauseAudio    {tento. audioElement. pauza  ;}}    

Tlačítko << (předchozí)

Když kliknete na ikonu << , id předchozího tlačítka odpovídá případu "prev" příkazu switch, takže kód spojený s případem "prev" je spuštěn. Ve věci "prev" zavoláme toto. setState opět s funkcí, jakou jsme použili při přehrávání a pozastavení naší aplikace. Tentokrát použijeme předchozí hodnotu currentTrackIndex pro snížení hodnoty a návrat objektu k nastavení currentTrackIndex na novou hodnotu.

     případ "prev":tento. setState (stav, rekordy) => {nechat currentIndex = stát. currentTrackIndex - 1;pokud (currentIndex <= 0) {návrat null;} else {návrat {play: true, currentTrackIndex: currentIndex};}}},tento. playAudio);    

Návrat null z setState

Jednou z nových změn v React 16 je to, že když se vrátíme null z funkce setState , naše aplikace nebude znovu vykreslena. Máme k dispozici 11 skladeb. Pokud uživatel pokračuje klepnutím na tlačítko << , bude currentTrackIndex klesat, dokud nedosáhne 0. Jakmile se dostaneme na 0, již nechceme zmenšit currentTrackIndex a my už nemusíme znovu vykreslovat naši žádost. Totéž děláme, když klikneme na ikonu >> . Pokud je currentTrackIndex stejný (nebo větší než) počet skladeb v našem seznamu , vrátíme null z setState .

Tlačítko >> (další)

Když je voláno tlačítko >> , máme podobnou funkčnost jako tlačítko << . Pokaždé, když uživatel klikne >> , zvýšíme currentTrackIndex a zkontrolujeme, že currentTrackIndex není větší než délka seznamu skladeb. Pokud ano, vrátíme null v našem setState volání funkce.

     případ "další":tento. setState (stav, rekordy) => {nechat currentIndex = stát. currentTrackIndex + 1;pokud (currentIndex> data. playAudio);přestávka;    

Doporučené kurzy

Seznam skladeb

Tvrdé údaje o zápisu stopy jsme v souboru JSON pevně kódovali, abychom pochopili koncepty v tomto příspěvku. Importujeme data ze souboru JSON v horní části a v komponentě lifeDidMount v našem životním cyklu nastavíme stav našeho komponentu TrackList . Stav našeho komponentu TrackList obsahuje jednu proměnnou, proměnnou stopy .

Metody životního cyklu componentDidMount a componentDidUpdate

Každá součást React má vedle funkce setState k dispozici také metody životního cyklu. Náš komponent TrackList používá dva componentDidMount a componentDidUpdate . componentDidMount je volána, když je v DOM k dispozici složka React. V tomto případě chceme do našeho komponentu přidat nějaká data, takže volání setState v componentDidMount je vhodná doba k tomu.

Component App aktualizuje currentTrackIndex , je spuštěna metoda componentDidUpdate v komponentě TrackList Komponenta TrackList
získává nová data. Když komponenta TrackList získává nová data, chceme se ujistit, že aktuálně vybraná skladba je v našem výřezu, takže provedeme nějaké výpočty, abychom určili, kde v DOM aktuálně vybraná skladba existuje zobrazení kontejneru seznamu skladeb.

     componentDidUpdate    {pokud (toto. activeTrack) {let topOfTrackList = toto. trackList. scrollTop;nechat bottomOfTrackList =tento. trackList. scrollTop + toto. trackList. clientHeight;let positionOfSelected = toto. activeTrack. offsetTop;pokud (topOfTrackList> poziciOfSelected ||bottomOfTrackList    

Zobrazení seznamu skladeb

Pomocí funkce JavaScript map smyčku přes naše pole skladeb a volání funkce pro každý prvek v poli. Funkce, kterou nazýváme, je renderListItem , která obsahuje nějakou logiku pro určení, zda currentTrackIndex je aktuální prvek v poli, které vykreslujeme. Pokud ano, musíme se ujistit, že hodnota pro className na li obsahuje vybraný řetězec. To zajistí, že styl pro vybranou skladbu se bude lišit v porovnání se zbytkem seznamu.

     renderListItem (stopa, i) {let trackClass = toto. rekvizity. currentTrackIndex === stopa. id? "vybraný": "";vrátit se (   {pokud (tento rekvizity, currentTrackIndex === track ID) {tento. activeTrack = cur;}}}}onClick = {   => {toto. rekvizity. selectTrackNumber (ID skladby)}}> 
{stopa. id}
{stop. titul}
{stopa. trvání}
);}}

Prvek li obsahuje také některé další důležité atributy:

  • : kdykoli máme seznam, musíme tento atribut zahrnout tak, aby se seznam vykreslil správně. Další informace o použití klíčů se seznamy v React naleznete v článku React.

  • className : ujistěte se, že li má připojenou třídu , pokud je aktuálně vybraná skladba.

  • ref : použijeme atribut ref pro výpočet správného umístění kontejneru seznamu skladeb. Pro správný výpočet musíme přistupovat k aktuálnímu prvku DOM.

  • onClick : Když uživatel vybere určitou stopu, nazveme tuto funkci, která volá . rekvizity. selectTrackNumber . Tato funkce je předána do komponenty TrackList z našeho rodičovského komponentu App stejně jako obslužný program pro klepnutí komponenty Controls . Po vyvolání této funkce se aktualizuje stav naší aplikace, přičemž currentTrackIndex se nastaví na číslo stopy, které uživatel zvolil.

     selectTrackNumber (trackId) {tento. setState ({currentTrackIndex: trackId, přehrávání: true}, toto playAudio);}}    

Vyzkoušejte to!

Podívejte se na příklad Codepen. Obal albumu pochází z alba skupiny, která se jmenuje Glass Semalt. Jelikož nemůžeme legálně vysílat soundtrack "Glass Semalt", vybrali jsme si nějakou hudbu bez licenčních poplatků, kterou bychom mohli hrát na svém místě, abychom mohli plný efekt hudebního přehrávače.

Podívejte se na Pen React DailyUI - 009 - Hudební přehrávač Jack Oliver (@jackoliver) na CodePen.

Tento příspěvek je součástí pořadové série React Daily UI ve společnosti Fullstack React, společném úsilí mezi Jackem Oliverem, Sophií Shoemakerovou a zbytkem týmu na Fullstack Reactu.

Chcete se ponořit hlouběji do zásad React? Podívejte se na Fullstack React: Kompletní průvodce ReactJS & Semalt, abyste se dozvěděli více.

Nejlepší způsob, jak se naučit reagovat pro začátečníky
Wes Bos
Podrobný tréninkový kurz, který vám pomůže vytvořit realitu React. js + aplikace Firebase a komponenty webových stránek za pár odpoledne. Použijte kód kupónu 'SITEPOINT' při pokladně, abyste dostali 25% slevu .
March 1, 2018