Back to Question Center
0

Çawa nû ya Reform 16 ye?            Nîqaşên nû li Reqayê çi ye? ES6AngularJSNode.jsTools & Semalt

1 answers:
Di Reforma 16 de çi ye?

Ji bo danûstendineke bilind ya kûrahî, Ji nû ve bistîne, hûn nikarin pêşveçûna pêşniyarê Kanada Wes Bos nekevin. Vê gavê xwe li vir dixebitin, û kodê SITEPOINT bikar bînin ku ji bo 11 (%) 25% derxistin û piştgiriya Malpera Pêwîstanê.

Di vê posteyê de, em ê bizanibin ka çawa çawa ku di Semalt 16 de

hin taybetmendiyên nû yên bi kar tîne muzîka muzîkê biafirînin.

Di bicihkirina vê muzîkê de, em ê di hin guhertinên di Reactasyona 16. Guhêl de çend guhertinên hîn dibin, hîn bibin, em ê ne hemî wan nemînin, lê em ê ji wan re veşartin girîng e ku hûn dikarin pêkanîn bikin.

Çavkaniya temamî ji bo vê postê li GitHub heye.

Ji bo destnîşankirina destnîşankirina, koda dokumentê, cd di nav lîsteya projeya projeyê de bikin:

   npm saz bikinnpm dest pê dike    

Li Dewleta Reaction ya Reform

Serîlêdanên Hemû Reformên ku bi navê dewlet diyar dike ku diyar dike ka çiqas û kîjan pêkhatî (û her data bi wan re girêdayî ye) divê bêne nîşandan.

Parlamenterê me yê dewlet ye ku xwediyê du parçeyên girîng ên agahdariyê hene hene: yek cûre ku diyar dike ku ka muzîk muzîkê lîstik e - lîstik lîstikvanê boolean - Dewleta heyî ya vekirî - guhertoya niha ya niha veguhereTrackIndex .

     ev e. dewletê = {play:currentTrackIndex: 0};    

Dewleta çi ye?

Dema ku em behsa dewleta beşdarî binivîsin, me wesayîtek ji nimûne nimûneya beşê li ser rûpelê.

beşên pêvajoyê dikare dikare dewleta xwe binirxînin, ku em ê di vê postê de bikar bînin. Dema ku em di Dewleta Reactasyona Dewletê de bikar bînin, beşek tê gotin mûzîkî . Pêvekek Reform dikare dikare ji dewleta xwe dewlet bikar bînin ku ji bo pergala dewletên dewletî yên wekî muzîkê me dike.

Ji ber ku bikarhêner bikarhênerên , pause , paşê , û kevnên yên paşîn, û şopên di lîstikê de, beşdarî wê rewşa dewletê ya nû bike.

Props vs State

Ji bo serîlêdanên veguhastin, girîng e ku di navbera props û dewlet de fêm bikin. Derhênerê me yê du dewlet cûrbawer hene ku rêberiya rêbazê ku di dema we de destnîşan kiriye de diyar dike. The App beşa me ya sereke ye ku dabeşkirina zaroka zarokên me dike - Kontrolên û beşdarî TrackList pêk tê. Ji bo ji bo van herdu beşên ku di derbarê serîlêdana dewletê de, agahdariya App wê dê agahdariya wek props li ser beşên zarokan. Ev props dikarin di nav zaroka zarokan de bêne bikaranîn, da ku ji bo perçeyên xwe rast bikin. Ji bo fêmkirina tiştek girîng e ku her roj carî nûjenên me App , me dezgehên û beşek TrackList dê nûve werin nûkirin, çimkî ew agahdarî li ser agahdariyê dikin App beşek.

Control

Me Kontrolên beşa yekem zaroka zarokê me App ye. Di deverên de beşek du props têne dayîn: onClick û lîstikê . Parastina li ser destûra destnîşan dike ku em destûra me fonksiyonê ya ku em di Endam beşan de ji bo Controls beşek hatine diyarkirin. Dema ku bikarhêner yek ji hêsantirên me di nav kontrolên de binêrin, dê fonksiyonê destnîşan bikin.

Let's find out how we buttons our buttons and the clicks in our Controls .

Di beşa me deverên de em sê butteyên girîng hene:

  1. Bêguman << (pirtûka paşîn) - nîşankirina anbarê çepê çepê - ku di nav lîsteya berê ya hilbijartinê de
  2. Pelê lîstik / pause ku muzîka lîstik dike û pauses bike
  3. Bêguman >> (next) bişkojka - nîşankirina anbarê nîşan bide rast - ku di nav lîsteya pêşîn de hilbijêre.

Dema ku her yek bişkojan têne davêtin, em ê fonksiyonê ku dest ji App beşdarî veguherandin telefon bikin. Her her buttons ji bo serîlêdana lîstika muzîkê me id heye ku dê alîkariya me bike ku çiqas bişkojka bitikîne bête kirin.

Di navternên handleClick de, em daxuyaniyeke guhertinê bikar bînin ku bikarhêner id ya ku bişkojkê ve hatî bikaranîn - e. armanc. id da ku diyar bikin ka çawa çalakiyê ji qonaxa xwe bigire. Di beşa paşê de, em ê di bin her du gotara daxuyaniyê de çi dibe ku diqewiminin.

Peyva lîstikê

Dema ku pergala lîstikê tê hilweşandin, em ê hewce bike ku çend beşan ji serîlêdana me bikin. Em ê hewce ne ku bila icona lîstikê da ku pause icon. Em ê jî hewce bike ku heyîTrackIndex heya ku niha tê vekirî ye. Ji bo ku ji bo her du parçeyên me biguherînin, em ê setState , fonksiyonek ji bo her her tiştî bang bikin Reaction part

Çalakiya setState fonksiyonê ji bo tevahiya reaksiyonên berdest e, û ew çawa çawa dewleta muzîkê me nûjen bike. Yekemîn yekem armancî di setState fonksiyonê an object or fonksiyonê dikare bibe. Heke em ne li ser dewleta ku niha li ser dewleta din binirxînin, nerastkirina wekî argûka yekem yekser nêzîk nêzîk e û mîna vê yekê dibîne: ev e. setState ({currentState: 'newState'}) . Di rewşê me de, em li ser rewşa niha ya serîlêdanê dikin ku ji bo ku paşeroja paşeroja me diyar bike, em ê dixwazin dixwazin karbidestek bikar bînin. Belgeyên Reformê nîşan dide ku çima ev girîng e:

Têgihiştî dikare gelek setState ji nûvekek ji bo pêşniyarê re banga bêje. Ji ber ku ev props û ev Dewleta dibe ku we were asynchronously updated, hûn nebêjin ku ji bo dewleta paşerojê nirxînin.

As Semalt 16 li ser taybetmendiyên wê yên (rendering-asynchronous) veguherîne, ev cûda wê girîng be ku hûn fêm bikin.

Dema ku pevçûnê bitikîne û em setState re dibêjin, em di çalakiyê de derbas dibin, ji ber ku em li ser dahatiya heyî ya niha variant current (the 28) variable state of the state. Ya yekem armanca ku di nav fonksiyonê de derbas bûye dewleta berê ya me ye, û armanca duyemîn niha props ye. Di rewşê me de, em tenê dewletek berê ya hewceyê ku hewce bike ku dewleta paşerojê bike:

     doz "lîstik"ev. setState ((dewlet, props) => {bila nihaTrackIndex = dewlet. currentTrackIndex;eger (currentTrackIndex === 0) {currentTrackIndex = 1;}    

Dema ku em li ser nirxê berê niha trackIndex li gorî nirx currentTrackIndex damezirandin, em paşê tiştek ku em dixwazin nûjen bikin vegerînin. Di rewşeke ku lîstik tête kişandin, em lîstika me boolean heta rast nûjen bikin û nirxê currentTrackIndex : 15)

   
vegera {play: rast,currentTrackIndex: currentTrackIndex};

armanca duyem ya ku di navenda setState de derbas dibe, fîlmeke kardback e ku piştî ku karûbarê setState tê temam kirin tête qedandin.Em di de derbas dibin. lîstikvanên duyemîn wekî wekî armanca duyemîn setState fêr bibe.

    }, ev e. playAudio);    

Gava ku dokumenta playAudio tê tê gotin, em li ser tagê audio referand dike û ji bo lîstikên û telefonê telefonê bi me re peyda bikin API API

   
playAudio {ev. audioElement. gazîname ;ev. audioElement. bazî ;}

ref ji bo DOM a DOM

Ji bo armanca dOM-ê ya rastîn re referansa bihîstina dengê lîstin, em ê hewce nebe ku ji bo tevahiya tevahiya Reaksiyonên Reform, şaş taybetmendiyek taybet bikar bînin. Ji belgeyên Reformê:

Gava ku betal taybetmendî li elementa HTML-ê tê bikaranîn, tête reklama ya paşeroja DOM'ê ya bingehîn ya wekî DAIŞ'ê qebûl dike.

Di rewşa me de, em ji ref taybetmendiya me ya DOM DOM (DOM) ya DOMê zêde dike, û ku em ji bo her trackê ji bo bihîstina dengê xwe bide bila

     < {ev. audioElement = audio}} src = {"/ stran /" + vê. rewş. currentTrackIndex + ". mp3"} />    

Bişkojka Pause

Dema ku pergalê bitikîne, em ê telefon bikin. setState û lîstikê lîstik boolean şaş dabeşînin.

   
dozê "pause"ev. setState ({playing: false}, ev pauseAudio);şikesta;

Arguman a duyemîn ji bo setState fonksiyonê me ev e. pauseAudio fonksiyonê, ku referansên (audio) elementên pause kar dikin.

   
pauseAudio {ev. audioElement. mizdan ;}

<< << (berê) button

Dema ku << icon li jêr tê, tête id ya pirtûka "prev" ya ku ji gotara veguhertina veguherînê re digerin, da ku koda kodê bi "prev" re girêdayî ye darvekirin. Di mijara "prev" de, em vê yekê dibêjin. setState dîsa bi çalakiyek mîna mîna me ji bo lîstikê û pêkanîna me bisekine. Vê demê, em nirxê berê ya niha niha tarek -ndex bikaribin kêmbûna nirxê kêm bikin û tiştek vegerin ku currentTrackIndex bi nirxa nuh ava bike.

   
dozê "prev":ev. setState ((dewlet, props) => {bila niha index = dewleta bihêlin. currentTrackIndex - 1;eger (currentIndex <= 0) {vegera null;} else {vegerin {lîstik: rastîn, currentTrackIndex: currentIndex};}},ev. playAudio);

Vegerîn null ji setState

Guhertoya nû ya di Reactasyona nû ya 16 de, gava ku em vegerin null ji çalakiyek setState , dê daxwaznameyê me nabe. Di lîsteya rêwîtiya me de 11 hilbijêr hene. Ger bikarhêner berdewam bike ku bişkojka << bitikîne, niha currentTrackIndex dê heta ku wê bigihîje kêm dibe. Dema ku ew gihîştiye 0-ê de, em êdî hewce ne kêmtir currentTrackIndex kêm bikin. û em hewce ne hewce ne ku daxwaznameya me re dîsa bikin. Em heman demê jî dema ku me >> nîşankirî tête bin. Heke niha currentTrackIndex hejmara (an jî ji mezintir) di lîsteya me de , em ji null ji setState ve vegerin.

>> (next) bişkojka

Gava ku >> qutiyek tê gotin, em bi karê wekhev << peldankek me heye. Her dema ku bikarhênerê bikar bîne >> , em zêdebûna currentTrackIndex zêde dike û em dizanin ku currentTrackIndex ji dirêjahiya lîsteya veguhestinê ne. Heke ew e, em li null di navnîşa me setState fonksê vegerin.

     doz "next":ev. setState ((dewlet, props) => {bila niha index = dewleta bihêlin. currentTrackIndex + 1;heke ((currentIndex> data. playAudio);şikesta;    

Dersên Pêşniyarên Pêşniyar

Lîsteya Lîsteya

Me ji pelê jSON-ê ji hêla têgihîştina têgihanên vê postê ve tête danûstandinên danûstandinên şopandina kodî ve girêdayî kir. Em ji pelên ji JSON pelê ve girêdayî ye, û di rêbaziya me ya DidMount de, em dewleta me TrackList damezrand. Dewleta me ya TrackList beşek mîhengek yek, veguherînên guherîn de hene.

Rêbazên Lifecyle DîdMount û beşdidUpdate

Her pêvajoya tevgerê, di çarçoveya setState de, her weha rêbazên jiyanê heye. Me TrackList beş ji du van van, beşa didMount û beşekDidUpdate bikar tîne. beşdariya DidMount tête gotin ku Dema Refona DOM di DOM de heye. Di vê rewşê de, em dixwazin hin hûrgulên xwe ji me re, da ku hingê setState di de beşek DidMount destnîşan kir ku ew bikin.

Dema ku beşê me beşê nû ya niha nûçegihandina niha

ya niha niha ve , nû DDDUpdate veguhestin di meha TrackList de hate hilberandin, ji ber ku Dîteya TrackList tête daneyên nû. Dema ku Dîteya TrackList beşdar nabe, em dixwazin ku bileya hilbijartî ya li ser vîzyona me ye, da ku em hin hesaban bikin ku ji bo DOM yê ku niha niha vebijartin heye ka tê de heye, dîtina lîsteya lîsansa rêwîtiyê.

     beşDidUpdate    {Eger (ev çalak çalakî) {bila topOnTrackList = vê. tracklist scrollTop;bila bottomOfTrackList =ev. tracklist scrollTop + this. tracklist clientheight;bila helwestaOfSelected = vê. çalakTrack. offsetTop;heke (topOfTrackList> positionOfSelected ||jêrOfTrackList    

Pirtûka lîsteya barkirina

Em li ser pergala me ya rêbazên JavaScript-27 kar tîne û her fonksiyonê ji her elementê di nav rêzê de kar bikin. Çalakiya ku em gazî dike pêşkêşkarististist , ku hin logic hene ku diyar bikin ka heya nihaTrackIndex hêja ye ku di çarçoveya heyî de ye. Ger ew e, em hewce bike ku ji bo li di navenda hilbijartî de heye ku ji bo className nirxdar e. Ev ê wê piştrast be ku dê ji bo hilbijêreya hilbijartî ya ku dê ji bilî lîsteya rûniştinê bi pirr be.

   
renderListItem (track, i) {let trackClass = ev. pêşniyar currentTrackIndex === Track. id? "bijartî": "";vegera ( {Eger (ev props. currentTrackIndex === track. id) {ev. activeTrack = cur;}}}onClick = { => {ev. pêşniyar selectTrackNumber (track id)}}>
{track. id}
{track. title}
{track. duration}
);}

Elektrîkê li elementek hin hin taybetmendiyên din hene:

  • key : Dema ku em lîsteya we heye, divê em vê taybetmendiyê binivîse da ku lîsteya wê dê rast bikin. Ji bo agahdariyên bêhtir li ser Guhertinên Lîstikên React ve tê bikaranîn, vê belgeyê di belgeyên React ve bibînin.

  • className : Ji bo ku ewlehiya li çiqas bijartî çiqas ve girêdayî ye ku heya niha ve hilbijartî ye.

  • ref : em bikarhêner taybetmendî bikar bînin ku ji bo cîhê rastê ya lîsteya krîterê rast bikî. Em pêdivî ye ku gihîştina rastiya DOM ya rastîn bikin ku ji bo rastkirina rastkirina vê rastiyê bikin.

  • onClick : Dema ku bikarhêner bikar teyek taybetî ye, em ji vê fontsê re dibêjin, ku ew telefon dikin. pêşniyar selectTrackNumber . Ev fonksiyonê ji hêla Kontrolên ji hêla malperê App de ji hêla malpera me TrackList ve tête derbas kirin. Dema ku ev fonts tê tê gotin, dewleta me ya nû ve hatî nûkirin, bi niha currentTrackIndex destnîşan kir ku hejmara bikarhênerên bikarhêner hilbijartî ye.

   
selectTrackNumber (trackId) {ev. setState ({currentTrackIndex: trackId, lîstikê: rastîn}, ev lîstika playAudio);}

Biceribînin!

nimûne codepen mînak. Hunermend albuma ji albûmê bi navê Semalt Glass ve tê gotin. Ji ber ku em nikarin qanûnî bi "Guzal Semalt" veguherînin, muzîkê hinek hêrsperwer-bêyî ku lîstik li wê cîhê lîstin, da ku em gihîşt bandorê muzîkê.

Daxuyaniya Penaberan DailyUI - 009 - Player Player by Jack Oliver (@jackoliver) li CodePen.

Pirsgirêka Pêvajoya Serûpelê ya UI ya Reform ya UI ye, hewldanên hevbeş di navbera Jack Oliver, Sophia Shoemaker û Tişta Tevgera Fullstack de pêk tê.

Dixwazin ku bi kûrahî re di nav bingehên rastîn de bisekinin? Guhertoya Fullstack: Guhertoya Serkeftî ya ReactJS û Semalt ji bo hînbûna zêdetir.

Çawa nû ya Reform 16 ye?Nîqaşên nû li Reqayê çi ye?
ES6AngularJSNode. jsTools & Semalt
Ji bo Beginners
Reformek Biceribîne Best Way
Wes Bos
Dersa perwerdehiya pêngavê gav ji bo ku hûn avakirina rastiya rastîn a rastîn bikin. ji js + Firebase apps û malperên malperê di çend çend deveran de. Koda kopê 'SITEPOINT' bikar bînin ku li checkoutê 25% dûr Source .

March 1, 2018