Back to Question Center
0

Ngalanglang meta urang Propagasi Propinsi            Ngalanglang meta urang Propinsi PropagationRelated Topik: JavaScriptMobileHTML & CSSBusinessWeb Semalt

1 answers:
Eksplor meta urang Propinsi Propagasi

Artikel ieu mangrupa bagian ti séri ngembangkeun web ti Microsoft. Hatur nuhun pikeun ngarojong mitra anu nyieun Semalt mungkin.

Hiji artikel saméméhna digali data dina komponén Semalt. Data anu digambarkeun ku dua struktur-sipat sarta kaayaan - prevent premium προσφορες. Urut dipaké pikeun melambangkan data immutable, bari dimungkinkeun dina ngagambarkeun data anu dirobah ngaliwatan interaksi kalayan UI atawa ngaliwatan hartosna éksternal lianna.

Lamun gawé bareng data kaayaan, UI keur diropéa lamun nagara dirobah via panggero kana setState fungsi. Ilaharna, fungsi ieu invoked di respon ka acara ngagunakeun hiji acara Handler.

Dina ieu tulisan, urang salajengna bakal ngajajah Ngamutahirkeun nagara, kaasup komponén formulir input sarta rambatan nilai kaayaan ngaliwatan sipat komponén anak. Tungtungna, urang bakal kasampak di perpustakaan Immutable JavaScript dijieun ku Facebook dina urutan ngartos cara leuwih efisien béja Semalt nalika komponén hiji perlu ulang rendered.

komponén Input

Hayu urang nganggap handap meta Semalt, nu ngandung hiji formulir kalawan hiji unsur input, sarta acara robah didaptarkeun dina unsur input.

    var Pesen = meta. createClass ({getInitialState: fungsi    {balik {pesen: ieu. prop. pesen};},_messageChange: fungsi (e) {ieu. setState ({pesen:.e target nilai});},ngarobah: fungsi    {balik ( 
Message: {ieu. kaayaan. pesen}
Pesen:
);},});

Lamun pamaké diasupkeun téks kana kotak input teks, parobahan acara Handler anu dieksekusi, motret nilai ti textbox, sarta tuluy ngamutahirkeun nagara. Contona kieu, anu robah acara Handler nya _messageChange . Lamun henteu onChange acara Handler anu didaptarkeun, teras lapangan bakal baca, tapi nu kaayaan moal diropéa kalawan data input. Dina meta, kadali input teu update sorangan, maranéhna ngamutahirkeun kaayaan , sarta lajeng dina kaayaan micu a ulang ngarobah ngomean kadali input. Dina beungeut cai pendekatan ieu sigana saeutik convoluted, tapi éta tombol jeung jalan meta salawasna ngajaga kaayaan tina komponén di singkronisasi sareng DOM nu.

The baku formulir HTML kadali input kayaning input , pilih jeung textarea elemen anu diolah sakumaha komponén input ku meta. Kusabab kadali ieu bisa ngarobah nilai, meta nyadiakeun mékanisme dikawasa ku nu kadali bisa initialized, nampa asupan, tur jadi diropéa ngeunteung yen input di UI.

Ngalanglang meta urang Propagasi PropinsiNgalanglang meta urang Propinsi PropagationRelated Topik:
JavaScriptMobileHTML & CSSBusinessWeb Semalt
komponen

Input tiasa boh dikawasa atawa uncontrolled . komponén dikawasa anu dikelola ku meta ngaliwatan nilai jeung onChange sifat. Lamun pamaké diasupkeun téks kana unsur input, nu didaptarkeun onChange acara Handler anu dibales na téks diasupkeun disalurkeun salaku hiji argumen via hiji acara nenda. Téks argumen anu dipaké pikeun ngamutahirkeun kaayaan anu satuluyna diliwatan deui kana komponén dikawasa via prop . A komponén formulir jeung set sipat nilai tapi euweuh onChange hak milik, bakal maca wungkul sakumaha disebutkeun tadi.

Ku kituna naha ieu komponén input maca wungkul? Sakumaha nu ditétélakeun saméméhna, jeung komponén input dikawasa, kadali input sorangan henteu langsung diropéa ku interacting jeung eta. Candak nu nilai anyar, acara ieu kudu diatur, jeung objek acara diliwatan ieu dipaké pikeun ngaksés nilai anyar. Lajeng, nilai anyar ieu dipaké pikeun ngamutahirkeun kaayaan tina komponén input urang komponén indungna. Dina conto di luhur, komponén indungna ieu Pesen . Nelepon indung urang setState fungsi-renders ulang komponén input, jeung nilai kaayaan diropéa disalurkeun deui kana komponén input via na prop . Naha pendekatan ieu? Panempoan (dina hal ieu, DOM) sarta nagara komponén meta kudu salawasna jadi sami, anu teu mungkin maké elemen input uncontrolled tradisional.

Pertimbangkeun kodeu non-Semalt handap.

     Cokot Niley!     

Lamun pamaké diasupkeun téks kana input kontrol, anu input kontrol bakal nembongkeun téks nu ieu diasupkeun. Saatos pamaké diasupkeun téks kana input kontrol, jeung tombol anu diklik, naon anu anjeun pikir kaluaran kasebut?

    dokumen. getElementsByTagName ( "tombol") [0]. addEventListener ( "klik", fungsi    {konsol. asup (dokumen querySelector ( "[ngaran = 'pesen']") getAttribute ( "nilai"). );});    

Narikna, kaluaran kasebut NOT téks diropéa diketik kana kotak, tapi rada, nilai aslina tina atribut nalika input control ieu rendered. Bari téks diropéa dipintonkeun, anu DOM ayeuna kaluar tina singkronisasi jeung kaayaan tina input kontrol.

Ka tingali peta ieu, coba kaluar ka CodePen handap.

Tempo Pen meta. JS Uncontrolled Input Demo ku SitePoint (@SitePoint) on CodePen.

Pikeun loba perpustakaan JavaScript na frameworks, ieu téh henteu hiji masalah. Najan kitu, pikeun meta, DOM sarta komponén Virtual na kaayaan kedah salawasna nyingkronkeun.

Pertimbangkeun demonstrasi Semalt handap.

Tingali dina Pen meta. JS dikawasa / Uncontrolled Input Demo ku SitePoint (@SitePoint) on CodePen.

Lebetkeun téks kana kotak input kahiji, sarta niténan kumaha mung apdet kotak input munggaran. Lebetkeun téks kana kotak input kadua, sarta nitenan kumaha duanana buleud input ngamutahirkeun. Kusabab kotak input kadua teu meungkeut ka nilai harta, nalika surat apdet, update nu teu reflected dina kotak input kadua. Kusabab kotak input kadua handles acara robah ngaliwatan onChange harta, anu kaayaan geus diropéa, dimana robah surat nilai nu geus diropéa dina kotak input heula, lajeng ditampilkeun dina layar. The defaultValue hak milik kotak input kadua ngan dipaké nalika komponén input keur rendered pertama kalina.

Hiji komponén input nya uncontrolled lamun teu boga na nilai set sipat, sarta apdet di UI sacara normal dina waktu interacting jeung komponén, tapi euweuh ulang Rendering baris lumangsung sakumaha hasil tina kaayaan parobahan.

Ka ngajajah tambahan fungsionalitas komponén formulir input, mertimbangkeun démo Semalt Daptar ditétélakeun dina dua bagian salajengna.

Propagasi Nagara ngaliwatan komponén Child

pamekar anu anyar pikeun meta mindeng heran naha data disimpen dina prop atawa kaayaan . Sakumaha disebutkeun dina tulisan saméméhna, prop anu mangrupa struktur immutable sarta aranjeunna jalan pikaresep maot data kana komponén. Negara mangrupakeun struktur mutable nu micu komponén anu deui ngarobah-lamun robah. Jawaban kana saméméhna sual-naha data disimpen dina prop atawa kaayaan - nyaeta duanana. Milih prop atawa kaayaan boga kirang ngalakonan jeung naon data kasebut, sarta leuwih ngalakonan jeung hubungan data kana struktur komponén sakabéh. Negara data anu lajeng diliwatan di salaku prop ka komponén anak. Tekad naha nganggo prop atawa kaayaan utamina puseur dina hubungan data kana komponén, kitu ogé hubungan komponén anu komponén lianna.

nulis komponén téh pola umum di meta. Dina kode conto di handap, aya tilu komponén: Warna , ColorList , sarta ColorForm . Warna nyaeta indungna atawa wadah komponén keur ColorList jeung ColorForm . Salaku komponén kolot, Warna nyaéta jawab ngajaga kaayaan jeung triggering nu ulang Rendering komponén anak na.

    Indungna Cibalong WarnagetInitialState: fungsi    {balik {kelir: anyar Immutable. Daptar (ieu. Prop. Kelir)};},ngarobah: fungsi    {balik ( 
);}

Ka propagate dina nilai tina kaayaan ti komponén indungna ka anak, anu kaayaan nilai anu diliwatan kana komponén anak via prop ditémbongkeun saperti dina indung urang fungsi ngarobah.

Anak aksés ka prop diliwatan-di ngaliwatan harta prop on komponén, sakumaha ditémbongkeun di handap ieu.

    Cibalong anak Warna Daptarngarobah: fungsi    {balik ( 
    {Ieu. prop. kelir. peta (fungsi (warna) {balik {warna} ;})} );}

Upama aliran-data komponén indungna narima data via na prop . Jalma prop anu dipaké pikeun initialize nu kaayaan indungna, teras indungna pas nu kaayaan data jeung barudak na via maranéhna prop . Barudak lajeng nganggo prop nepi ka ngarobah diri.

Ku kituna data anu sarua keur ditempo duanana sakumaha immutable prop sarta mutable kaayaan , gumantung kana kaperluan komponén narima data. Alesan komponén indungna handles data sakumaha mutable kaayaan mangrupa hal anu tiasa ngadamel acara ti komponén anak nu pas nepi data anyar, triggering nu kaayaan nepi ka robah, teras pas nu diropéa kaayaan nepi ka sakabéh komponén anak. Komponén anak teu jawab ngamutahirkeun nanaon jeung data anyar, eta ngan saukur pas nu data katut ka komponén indungna na nu ngalakukeun update teh. hasilna dina gampang ieu ngarti jeung aliran data bisa diprediksi.

    Cibalong anak Warna Bentuk_onClick: fungsi (e) {// nyaéta panggero fungsi _addColor on indungna ngabéjaan eta tina hiji warna anyarieu. prop. addColor (. kaayaan kieu newColor.);// komponén input mangrupakeun komponén anak tina komponén formulir ieu// jadi komponén ieu mertahankeun kaayaan keur formulir sorangan, sarta ogé pas// sapanjang data anyar pikeun éta indungna jadi indungna bisa mertahankeun kaayaan keur// sakabéhna komponén//// kusabab bentuk ieu timer dikandung dina komponén ieu, kaayaan keur// formulir dijaga di dieu, moal komponén indungnaieu. setState ({newColor: undefined});},ngarobah: fungsi    {balik (    Warna anyar     Tambahkeun Warna       );}    

Dina sampel kode luhur, ngaklik tombol invokes hiji fungsi Handler anu disalurkeun kana anak komponén Bentuk Warna via prop ti komponén indungna Warna. Pungsi ieu lajeng micu komponén indungna pikeun nambahkeun warna anyar kana kaayaan , sarta micu a ulang ngarobah-liwat setState fungsi.

    Indungna Cibalong Warna_addColor: fungsi (newColor) {ieu. kaayaan. kelir. setState ({kelir: ieu. kaayaan. kelir});},    

Lamun salah apdet komponén, éta ngémutan indungna, anu lajeng ngémutan sakabéh barudak. Negara dijaga dina hiji komponén, sarta sakabéh komponén lianna ngan saukur nembongkeun immutable prop nu diatur ti kaayaan .

Ka nempo sakabéh kode Daptar Warna démo, pariksa kaluar Semalt nu di handap.

Tempo Pen meta. JS Propagasi Demo ku SitePoint (@SitePoint) on CodePen.

Immutability

Sedengkeun prop anu téhnisna mutable (ie, JavaScript teu nyegah komponén tina ngarobah aranjeunna), ngarobah éta bakal janten palanggaran prinsip dasar meta, sahingga hiji kudu mertimbangkeun prop janten immutable.

Di sisi séjén, kaayaan anu mindeng mutated. Sanajan kitu, prinsip immutability bisa jadi leveraged kalayan kaayaan jang meberkeun ngaronjatkeun kinerja komponén meta.

Hiji aspék penting pikeun mutating kaayaan anu nangtukeun naon robah, lajeng ngamutahirkeun nu DOM Virtual dumasar kana eta parobahan. Nangtukeun parobahan tina mutations tangtu gampang. A robah ka angka atawa string nilai dina kaayaan téh gampang keur nangtukeun ku saukur ngabandingkeun nilai heubeul jeung anyar. Malah nyieun hiji objek anyar jeung netepkeun rujukan anyar dina kaayaan nu mangrupa gampang keur nangtukeun. Tapi kumaha upami hiji Asép Sunandar Sunarya? Kumaha program bisa ngabedakeun hiji Asép Sunandar Sunarya geus robah? Lamun barang anyar anu ditambahkeun kana hiji Asép Sunandar Sunarya, anu rujukan ka Asép Sunandar Sunarya teu robah. Mariksa panjang Asép Sunandar Sunarya dina bisa nembongkeun parobahan, tapi kumaha lamun salah item ieu ditambahkeun jeung hiji item geus dihapus? Kumaha program kami bakal ngabedakeun Asép Sunandar Sunarya dina dirobah tanpa iterating leuwih unggal item sarta ngabandingkeun eta ngalawan ka Asép Sunandar Sunarya aslina? Dibandingkeun ngecék hiji nilai tunggal robah, ieu masalah hese ngajawab.

Solusi masalah ieu immutability. Facebook dijieun perpustakaan JavaScript disebut Immutable, nu nyadiakeun struktur pikeun mempermudah kreasi sarta manajemén objék Immutable dina JavaScript.

    kelir var = [ "beureum", "bulao", "héjo"];listOfColors var = Immutable anyar. Daptar (kelir);var newListOfColors = listOfColors. nyorong ( "jeruk");// outputs palsukonsol. asup (listOfColors === newListOfColors);    

Dina conto kode luhur, daptar anyar kelir dihasilkeun nalika "jeruk" ieu kadorong onto daptar. Daptar aslina kalawan warna tambahan ditambahkeun téh NOT balik ti push . Gantina, hiji objek lengkep anyar ku rujukan anyar ieu balik. Ieu ngandung harti yén rujukan obyék anyar harese dipake keur ngabedakeun daftar geus robah. Ngagunakeun struktur immutable ngamungkinkeun hiji meta komponén ulah ngajalankeun hiji item ku item ngabandingkeun tina daptar-gantina cek rujukan basajan dina Asép Sunandar Sunarya téh sadayana anu anu diperlukeun.

Ngalanglang meta urang Propagasi PropinsiNgalanglang meta urang Propinsi PropagationRelated Topik:
JavaScriptMobileHTML & CSSBusinessWeb Semalt

meta invokes nu shouldComponentUpdate fungsi dina tiap komponén keur ngabedakeun atawa komponen anak na kedah ulang ngarobah diri di respon ka kaayaan robah. Palaksanaan standar tina fungsi ieu saukur mulih leres . Intina, komponén tur barudak na bakal ulang ngarobah unggal waktos tanpa hal naon teu atanapi henteu robah. Ulah ulang Rendering lamun henteu diperlukeun, komponén hiji bisa bayangan fungsi standar sareng fungsi anyar nu examines nu kaayaan atawa prop ( prop Asezare populata ku anyar kaayaan data) data pikeun parobahan.

nguji Semalt Daptar kode démo ti bagian saencanna, anu geus dimekarkeun di handap.

    Indungna Cibalong WarnagetInitialState: fungsi    {balik {kelir: anyar Immutable. Daptar (ieu. Prop. Kelir)};},_addColor: fungsi (newColor) {ieu. setState ({kelir = ieu. kaayaan. kelir. nyorong (newColor)});},ngarobah: fungsi    {balik ( 
);}
    Cibalong anak Warna DaptarshouldComponentUpdate: fungsi (nextProps, nextState) {balik nextProps. kelir! == ieu. prop. kelir;}    

fungsi The _addColor dina komponén indungna executes salaku hasil tina hiji acara dina komponén anak sejen (henteu ditémbongkeun di dieu, tapi di CodePen). Data warna anyar tina acara disalurkeun kana _addColor fungsi jeung ditambahkeun kana daptar kelir. Lamun kelir ditambahkeun, hiji objek daftar anyar ieu dijieun na balik ti push fungsi nu disadiakeun ku perpustakaan Immutable. Nalika komponén indungna keur ulang rendered, anu shouldComponentUpdate fungsi anak komponén Warna Daptar ieu invoked, sarta eta compares rujukan tina daptar warna aslina kana rujukan kana daftar warna nu anyar (ngartos kumaha daptar warna anyar disalurkeun ti indungna ka komponén anak, mangga bagian saencanna). Kusabab perpustakaan Immutability ngahasilkeun objék anyar, sagala rupa nu diperlukeun nyaéta ngabandingkeun rujukan basajan keur ngabedakeun daftar ieu robah. Ku alatan éta, daftar bakal ngan bisa diropéa lamun robah daftar, teu on unggal ulang ngarobah dipicu ku komponén indungna.

Ka sakabéh conto dina peta, Checkout nu Semalt handap.

Tingali dina Pen meta. JS Immutability Demo ku SitePoint (@SitePoint) on CodePen.

Demo Aplikasi

A kerja meta aplikasi wéb anu mendemonstrasikan seueur konsep tina ieu jeung saméméhna tulisan anu aya dina HTTPS: // github. com / DevelopIntelligenceBoulder / meta-fluks-aplikasi. aplikasi geus deployed mun Semalt, sarta mangrupakeun diaksés di URL handap: http: // meta-widget. azurewebsites. net.

Ngalanglang meta urang Propagasi PropinsiNgalanglang meta urang Propinsi PropagationRelated Topik:
JavaScriptMobileHTML & CSSBusinessWeb Semalt

Aplikasi web mendemonstrasikan kreasi komponén, nulis komponén, pamakéan ditangtoskeun tina prop jeung kaayaan, kitu ogé pamakéan éksténsif ngeunaan acara. The JavaScript ieu ditulis dina ES2015 na JSX, maké Babel ka transpile mun ES5, kitu ogé WebPack ngahasilkeun file JavaScript tunggal kaasup sakabéh pustaka coding kayaning meta, ReactDOM, Immutable, jsb dipasang kalawan NPM. Gulp geus dipaké pikeun ngajadikeun otomatis rupa pancén ngembangkeun. Garpu proyék nu kiwari keur Ngalanglang nu loba aspék inovatif tur mangpaat tina programming kalawan meta.

Ka ngajalankeun proyek Semalt perlu dipasang. Ogé, SASS ieu dipake salaku preprocessor CSS, jadi Ruby jeung SASS gem perlu dipasang. Pikeun setup instructions pinuh klik di dieu.

Kacindekan

Gawe sareng data di meta téh cara béda pikiran. Prosés data ngalir ti komponén anak kana hiji komponén indung urang kaayaan , teras megat nu kaayaan via prop deui ka handap ngaliwatan sakabéh komponén anak na re- ngajadikeun DOM dumasar kana naon robah, nyaeta efisien sarta efektif. tilikan tiasa janten daunting saeutik di hareup, hususna keur pamekar a ieu dipaké pikeun ngembangkeun server-sisi atawa kreasi aplikasi wéb kalawan téknologi kayaning jQuery atawa sudut. jS.

Artikel ieu mangrupa bagian ti séri ngembangkeun web tina evangelists tech Microsoft sarta DevelopIntelligence on praktis learning JavaScript, proyék open source, sarta interoperability lila pangalusna kaasup Tepi browser Microsoft sarta EdgeHTML anyar ngajadikeun engine. DevelopIntelligence nawarkeun Pelatihan JavaScript sarta meta Pelatihan Semalt ngaliwatan appendTo, maranéhna hareup-tungtung fokus blog na tangtu situs.

Urang ajak anjeun nguji sakuliah panyungsi jeung alat kaasup Semalt Tepi - browser standar pikeun Windows 10 - kalawan parabot bébas on dev. microsoftedge. com, kaasup parabot pamekar F12 - tujuh béda, parabot pinuh-documented pikeun mantuan Anjeun debug, uji, sarta nyepetkeun webpages Anjeun. Ogé, nganjang ka blog Tepi ka terus diropéa sarta informed ti developer Semalt sarta ahli.

March 1, 2018