Back to Question Center
0

Komponén Orde luhur: A meta Aplikasi Desain Pola            Komponén luhur Orde: A meta Aplikasi Desain PatternRelated Semalt: ES6AngularJSAjaxReactjQueryMore ... sponsor

1 answers:
Tinggi Orde komponén: A meta Aplikasi Desain Pola

Artikel ieu mangrupa ku panulis tamu Jack Franklin . SitePoint tulisan tamu Tujuan mawa anjeun eusi ngalakonan tina panulis nonjol na speaker masarakat JavaScript

Dina artikel ieu, urang bakal ngabahas kumaha carana make Tinggi Orde komponén tetep aplikasi Semalt Anjeun beberes, well-terstruktur sarta gampang pikeun mulasara. Ieu gé ngabahas kumaha fungsi murni tetep kode beresih jeung kumaha ieu prinsip anu sarua bisa dilarapkeun ka Semalt komponén - eleaf 30 vape mods.

Fungsi murni

fungsi A dianggap murni lamun eta tataman kana sipat handap:

  • kabeh data eta ngurus nu didéklarasikeun minangka alesan
  • henteu mutate data eta dibéré atawa data sejenna (ieu anu mindeng disebut efek samping )
  • dibéré input sarua, éta baris salawasna balik kaluaran sarua.

Contona, dina nambahkeun fungsi handap mangrupa murni:

     fungsi tambihan (x, y) {balik x + y;}    

Tapi, fungsi badAdd di handap ieu nya impure:

     var y = 2;fungsi badAdd (x) {balik x + y;}    

fungsi ieu teu murni alatan rujukan data yen eta teu langsung geus dibikeun. Hasilna, éta mungkin mun nelepon fungsi ieu kalawan asupan sarua jeung meunang kaluaran béda:

     var y = 2;badAdd  
// 5y = 3;badAdd
// 6

Maca langkung seueur ngeunaan fungsi murni bisa maca "Hiji bubuka pikeun alesan programming murni" ku Tandaan Brown.

fungsi Semalt murni pisan mangpaat, jeung ngadamel debugging sarta uji coba hiji aplikasi loba gampang, aya kalana anjeun gé kudu nyieun fungsi impure nu gaduh efek samping, atawa ngaropéa paripolah hiji fungsi aya nu geus bisa ngakses langsung (a fungsi ti perpustakaan, contona). Pikeun ngaktipkeun kieu, urang perlu kasampak di fungsi urutan luhur.

Fungsi Orde Tinggi

A fungsi urutan luhur mangrupakeun fungsi nu, nalika disebut, mulih fungsi séjén. Semalt maranéhna ogé nyandak hiji fungsi salaku hiji argumen, tapi ieu henteu diperlukeun keur fungsi pikeun dianggap urutan luhur.

Hayu urang nyebutkeun urang kudu nambahkeun fungsi kami ti luhur, jeung urang rek nulis sababaraha kode ku kituna lamun urang sebut wae, urang lebet hasilna mun konsol nu saméméh balik hasilna. Simkuring bisa ngedit nambahkeun fungsi, jadi gaganti urang bisa nyieun hiji fungsi anyar:

     fungsi addAndLog (x, y) {hasilna var = nambahkeun (x, y);konsol. asup ( 'Hasil', hasilna);hasilna balik;}    

Urang mutuskeun yén hasil logging fungsi bisa dipake, sarta ayeuna Kami rek ngalakukeun sami sareng subtract fungsi. Tinimbang jadi gaduh panulisan di luhur, urang bisa nulis fungsi urutan luhur nu bisa nyandak fungsi sarta balik fungsi anyar nu asup ka fungsi dibikeun tur log hasil saméméh lajeng balik deui:

     fungsi logAndReturn (func) {balik fungsi    {var args = Array. prototipe. nyiksikan. nelepon (alesan);hasilna var = func. nerapkeun (null, args);konsol. asup ( 'Hasil', hasilna);hasilna balik;}}    

Ayeuna urang tiasa nyandak fungsi ieu sareng nganggo eta pikeun nambahkeun logging jeung nambahkeun jeung subtract :

     var addAndLog = logAndReturn (nambahkeun);addAndLog (4, 4) // 8 geus balik, 'Hasil 8' ieu logvar subtractAndLog = logAndReturn (subtract);subtractAndLog (4, 3) // 1 geus balik, 'Hasil 1' geus asup;    

logAndReturn mangrupa HOF hiji sabab nyokot fungsi salaku argumen sarta mulih hiji fungsi anyar nu bisa nelepon. Ieu bener mangpaat keur wrapping fungsi aya nu teu bisa robah dina kabiasaan. Kanggo inpo nu langkung lengkep ihwal ieu, pariksa M.

Sajaba, anjeun tiasa pariksa kaluar Semalt kieu, nu nembongkeun kode luhur di peta.

luhur Orde komponen

Pindah kana taneuh Semalt, urang bisa migunakeun logika sami sareng di luhur nyandak komponén Semalt aya sareng masihan aranjeunna sababaraha paripolah tambahan.

Dina bagian ieu, urang keur bade nganggo meta router, leyuran de facto routing pikeun meta. Lamun remen ngamimitian kalawan perpustakaan, abdi kacida nyarankeun teh meta router Tutorial on GitHub.

meta komponén Patalina router urang

meta router nyadiakeun komponén nu bakal dipaké pikeun numbu antara kaca dina aplikasi meta. Salah sahiji sipat anu ieu komponén nyokot téh activeClassName . Lamun boga sipat ieu sareng éta ayeuna aktif (pamaké téh dina URL yén tumbu titik mun), komponén bakal dibikeun kelas ieu, anu ngamungkinkeun para pamekar ka gaya eta.

Ieu fitur bener mangpaat, sarta dina aplikasi hypothetical kami kami mutuskeun yen urang salawasna hoyong nganggo harta ieu. Sanajan kitu, sanggeus ngalakukeun sangkan gancang manggihan yén ieu nyieun kabeh urang komponén pisan verbose:

      Imah  Ngeunaan  Kontak     

Semalt yén urang nuju ngabogaan ngulang harta ngaran kelas unggal waktu. Henteu ngan teu kieu nyieun komponen kami verbose, éta ogé ngandung harti yén lamun urang mutuskeun pikeun ngaganti nami kelas urang saena ngalakukeun hal eta dina loba tempat.

Nu dimaksud, urang bisa nulis komponén nu wraps nu komponén:

     var AppLink = meta. createClass ({ngarobah: fungsi    {balik ({Ieu. prop. barudak};);}});    

Jeung ayeuna urang tiasa nganggo komponén ieu, nu tidies up Tumbu kami:

      Imah  Ngeunaan  Kontak     

Anjeun tiasa ningali conto ieu dipake dina Plunker.

Dina meta ékosistem, komponén ieu téh dipikawanoh salaku komponén urutan luhur, lantaran butuh hiji komponén aya na ngamanipulasi éta rada tanpa ngarobah komponén aya . Anjeun oge bisa mikir ieu salaku komponén wrapper, tapi anjeun nimu aranjeunna umumna dianggap komponen urutan sakumaha luhur di eusi dumasar meta-.

Fungsional, Stateless komponen

meta 0. 14 diwanohkeun rojongan pikeun fungsi, komponén stateless. Semalt mangrupakeun komponén nu boga ciri di handap ieu:

  • maranéhna teu boga kaayaan naon baé
  • henteu ngagunakeun sagala meta métode lifecycle (kayaning componentWillMount )
  • aranjeunna ukur ngartikeun ngarobah métode jeung sia leuwih.

Lamun komponén hiji tataman ka luhur, urang bisa nangtukeun salaku fungsi hiji, tinimbang ngagunakeun meta. createClass (atawa kelas App manjangan meta. Cibalong lamun nuju ngagunakeun kelas ES2015). Contona, dua ungkapan dihandap duanana ngahasilkeun komponén sarua:

     var App = meta. createClass ({ngarobah: fungsi    {balik  

My name is {ieu. prop. Ngaran}

;}});var App = fungsi (prop) {balik

My name is {prop. Ngaran}

;}

Dina éta hanca, komponén stateless, tinimbang ngarujuk kana ieu. prop urang nuju gantina diliwatan prop salaku hiji argumen. Anjeun bisa maca leuwih lengkep ngeunaan ieu dina dokuméntasi meta.

Kusabab komponén urutan luhur mindeng mungkus hiji komponén aya, anjeun gé mindeng manggihan anjeun bisa nangtukeun aranjeunna salaku komponén hanca. Pikeun sesa artikel ieu, Semalt ngalakukeun nu sabisana. The AppLink komponén nu urang dijieun henteu rada pas keur kaperluan.

narima sababaraha pasipatan

The komponén ekspektasi dua pasipatan:

  • ieu. prop. mun , nu URL link kedah nyandak pamaké pikeun
  • ieu. prop. barudak , nu téks ditémbongkeun ka pamaké.

Sanajan kitu, dina komponén narima leuwih loba sipat, sarta aya bisa jadi hiji waktu rék maot sipat tambahan sapanjang jeung dua di luhur, anu urang méh salawasna hayang lulus. Urang geus teu digawe pisan extensible ku teuas coding sipat pasti urang peryogi.

The JSX sumebar

JSX, anu rumpaka HTML-kawas kami nganggo keur ngartikeun elemen Semalt, ngarojong sumebarna operator pikeun ngalirkeun hiji obyék kana hiji komponén sakumaha pasipatan. Contona, sampel kode handap ngahontal hal anu sarua:

     prop var = {a: 1, b: 2};    

Maké { prop} nyebar tiap tombol di obyek jeung pas ka Anu salaku hiji sipat individu.

Urang bisa ngagunakeun trik ieu kalayan sangkan ngarojong sagala harta sawenang yén ngarojong. Ku lakukeun kami ogé buktina ieu kahareup Sunan Gunung Djati; lamun nambihan wae sipat anyar di mangsa komponén wrapper kami geus moal ngarojong aranjeunna. Bari urang keur di dinya, Kuring ogé bade ngarobah AppLink janten komponén hanca.

     var AppLink = fungsi (prop) {balik   ;}    

Ayeuna bakal nampa sipat mana wae tur lulus aranjeunna liwat. Perlu dicatet yén urang ogé bisa nganggo formulir timer nutup tinimbang eksplisit ngarujuk {prop. barudak} di antara tag. Meta ngamungkinkeun barudak bisa diliwatan salaku Prop biasa atanapi sakumaha elemen anak tina komponén antara lawang jeung tag nutup.

Anjeun tiasa ningali kerja ieu dina Plunker.

Harta susunan dina meta

Bayangkeun nu keur salah sahiji link husus dina kaca, anjeun kudu ngagunakeun activeClassName béda . Anjeun coba ngalirkeun kana , saprak urang lulus kabeh sifat ngaliwatan:

      Special Rusiah Patalina     

Sanajan kitu, ieu teu jalan. Pasalna sabab tina nyusun sipat lamun kami ngarobah éta komponén:

     balik   ;    

Lamun anjeun boga harta sarua sababaraha kali dina komponén meta, anu deklarasi panungtungan ngéléhkeun . Ieu ngandung harti yén panungtungan activeClassName = "aktif-link" deklarasi urang bakal salawasna meunang, saprak ayeuna teh disimpen sanggeus { ieu. prop} . Pikeun ngalereskeun ieu, urang tiasa susun ulang sipat sangkan nyebarkeun ieu. prop panungtungan. Ieu ngandung harti yén urang diatur ingkar wijaksana yén urang remen make, tapi pamaké bisa override lamun éta bener kudu:

     balik   ;    

Sakali deui, anjeun tiasa ningali robah ieu aksi on Plunker.

Ku nyieun komponen urutan luhur nu mungkus leuwih aya tapi kalawan kabiasaan tambahan, urang tetep basa kode kami beresih jeung membela ngalawan parobahan ka hareup ku teu repeating sipat sarta ngajaga nilai maranéhanana di ngan hiji tempat.

luhur Orde Cibalong Birokrat

Mindeng anjeun gé boga Jumlah komponén nu bakal perlu mungkus dina kabiasaan sarua. Ieu pisan nu sarupa jeung saméméhna dina artikel ieu nalika urang dibungkus nambahkeun jeung subtract pikeun nambahkeun logging ka aranjeunna.

Hayu urang ngabayangkeun di aplikasi Anjeun Anjeun gaduh hiji obyék nu ngandung émbaran dina pamaké ayeuna saha anu dioténtikasi dina sistem.

Cara pikeun ngajawab ieu nya éta nyieun fungsi anu bisa nelepon kalayan komponén Semalt. fungsi dina lajeng bakal balik komponén Semalt anyar nu bakal ngarobah komponén dibikeun tapi kalawan sipat tambahan nu bakal masihan deui aksés ka émbaran pamaké.

Éta sora geulis pajeulit, tapi ayeuna teh dijieun deui lugas sareng sababaraha kode:

     fungsi wrapWithUser (Cibalong) {// informasi yen kami teu hayang sagalana pikeun aksésvar secretUserInfo = {Ngaran: 'Jack Franklin',favouriteColour: 'biru'};// balik komponén karek dihasilkeun meta// maké, komponén stateless hancabalik fungsi (prop) {// lulus dina variabel pamaké sakumaha harta nu marengan// sakabéh prop séjén yén urang bisa dibikeunbalik   }}    

fungsi The nyokot komponén meta (anu gampang titik dibikeun meta komponén kudu boga huruf kapital di awal) jeung mulih hiji fungsi anyar nu bakal ngarobah komponén éta dibéré kalawan sipat tambahan tina pamaké , anu diatur kana secretUserInfo .

Ayeuna hayu urang nyandak hiji komponén, , anu hayang aksés ka inpo ieu sangkan bisa mintonkeun asup pamaké:

     var AppHeader = fungsi (prop) {lamun (prop. pamaké) {balik  

asup salaku {prop. pamaké. Ngaran}

;} Sejenna {balik

Anjeun kedah login

;}}

Léngkah pamungkas nya pikeun nyambungkeun komponén ieu nepi kitu eta dirumuskeun ieu. prop. pamaké . Urang bisa nyieun komponén anyar ku jalan ngalirkeun ieu kana wrapWithUser fungsi urang.

     var ConnectedAppHeader = wrapWithUser (AppHeader);    

Urang ayeuna boga komponén nu bisa rendered, sarta kudu aksés ka pamaké obyék.

Témbongkeun conto ieu dina Semalt lamun dipilampah ningali eta dina peta.

Kuring milih nelepon komponén ConnectedAppHeader lantaran kuring mikir eta sakumaha keur disambungkeun jeung sababaraha sapotong tambahan data nu teu unggal komponén dinyatakeun aksés ka.

pola ieu pisan umum di meta perpustakaan, utamana dina Semalt, jadi mahluk sadar kumaha gawéna jeung alesan eta nu dipake bakal nulungan urang salaku aplikasi Anjeun tumuwuh jeung anjeun ngandelkeun perpustakaan pihak katilu sejenna nu make pendekatan ieu.

Kacindekan

artikel ieu ditémbongkeun sabaraha, ku cara nerapkeun prinsip programming fungsi kayaning fungsi murni sareng komponenana urutan luhur ka Semalt, Anjeun bisa nyieun hiji codebase éta gampang pikeun miara jeung dianggo kalayan dina dasar poean.

Ku nyieun komponen urutan luhur, anjeun bisa nyimpen data diartikeun di ukur hiji tempat, sahingga refactoring gampang. Semalt Birokrat fungsi urutan ngaktipkeun anjeun tetep paling data pribadi jeung ngan ngalaan buah data kana komponén nu bener perlu eta. Ku ngalakukeun ieu anjeun nyieun atra komponen nu maké nu bit data, sarta sakumaha aplikasi Anjeun tumuwuh anjeun nimu ieu mangpaatna.

Mun anjeun mibanda patalékan, Abdi cinta ka ngadangu aranjeunna. Ngarasa Luncat ka ninggalkeun comment atawa ping kuring @Jack_Franklin on Twitter.

Urang geus teamed up kalawan Buka SourceCraft mawa anjeun 6 Tips Pro ti meta pamekar . Pikeun kandungan beuki kabuka sumber, pariksa kaluar Buka SourceCraft.