Back to Question Center
0

Meneroka Penyebaran Negeri React            Meneroka Penyebaran Negeri ReactsBeberapa topik: JavaScriptMobileHTML & CSSBusinessWeb Semalt

1 answers:
Meneroka Penyebaran Negeri React

Artikel ini adalah sebahagian daripada siri pembangunan web dari Microsoft. Terima kasih kerana menyokong rakan kongsi yang membuat Semalt mungkin.

Satu artikel terdahulu meneroka data dalam komponen Semalt. Data diwakili oleh dua struktur-sifat dan keadaan - royal ace free spins. Yang pertama digunakan untuk mewakili data tidak berubah, sementara yang terakhir mewakili data yang diubah melalui interaksi dengan UI atau melalui cara luaran yang lain.

Apabila bekerja dengan data negeri, UI dikemas kini apabila keadaan ditukar melalui panggilan ke fungsi setState . Biasanya, fungsi ini digunakan sebagai tindak balas kepada peristiwa yang menggunakan pengendali peristiwa.

Dalam jawatan ini, kami akan terus meneroka pengemaskinian negeri, termasuk komponen input bentuk dan penyebaran nilai-nilai negeri melalui sifat-sifat komponen kanak-kanak. Akhirnya, kami akan melihat pustaka JavaScript Immutable yang dibuat oleh Facebook untuk memahami cara yang lebih cekap untuk memberitahu Semalt apabila komponen perlu diberikan semula.

Komponen Input

Mari kita pertimbangkan React Semalt berikut, yang mengandungi satu bentuk dengan satu elemen masukan, dan peristiwa perubahan yang didaftarkan pada elemen masukan.

   var Message = React. createClass ({getInitialState: function    {kembali {mesej: ini. prop. mesej};},_messageChange: function (e) {ini. setState ({mesej: e. sasaran. nilai});},menyebabkan: fungsi    {kembali (
Mesej: {ini. negeri. mesej}
Mesej:
);},});

Apabila pengguna memasuki teks ke dalam kotak input teks, seorang pengendali acara perubahan dilaksanakan, menangkap nilai dari kotak teks, dan kemudian mengemas kini keadaan. Untuk contoh ini, pengendali acara perubahan adalah _messageChange . Jika tiada onChange pengendali acara didaftarkan, maka bidang akan dibaca, tetapi keadaan tidak akan dikemas kini dengan data input. Dalam React, kawalan input tidak mengemas kini diri mereka, mereka mengemas kini keadaan , dan kemudian keadaan mencetuskan re-render untuk mengemas kini kawalan input. Di permukaan, pendekatan ini seolah-olah agak rumit, tetapi ia adalah kunci kepada cara React sentiasa menyimpan keadaan komponen yang selari dengan DOM.

Kawalan input bentuk standard HTML seperti input , pilih dan teksarea unsur diperlakukan sebagai komponen input oleh React. Kerana kawalan ini dapat mengubah nilai, React menyediakan mekanisme yang dikawal oleh mana kawalan dapat diinisialisasi, menerima input, dan dikemas kini untuk mencerminkan input tersebut di UI.

Meneroka Penyebaran Negeri ReactMeneroka Penyebaran Negeri ReactsBeberapa topik:
JavaScriptMobileHTML & CSSBusinessWeb Semalt

Komponen input boleh sama ada dikawal atau tidak terkawal . Komponen yang terkawal diuruskan oleh React menerusi nilai dan onChange hartanah. Apabila pengguna memasuki teks ke dalam elemen masukan, pengendali acara berdaftar onChange dilaksanakan dan teks dimasukkan diluluskan sebagai hujah melalui objek peristiwa. Hujah teks digunakan untuk mengemas kini keadaan yang kemudiannya diluluskan semula ke komponen terkawal melalui prop . Komponen borang dengan nilai harta ditetapkan tetapi tidak onChange harta, akan dibaca sahaja seperti yang dinyatakan sebelum ini.

Jadi mengapa komponen input dibaca sahaja? Seperti yang diterangkan sebelum ini, dengan komponen input terkawal, kawalan input itu sendiri tidak dikemaskini terus dengan berinteraksi dengannya. Untuk menangkap nilai baru, acara ini mesti ditangani, dan objek acara lulus digunakan untuk mengakses nilai baru. Kemudian, nilai baru digunakan untuk mengemaskini keadaan komponen induk komponen input. Dalam contoh di atas, komponen induk ini ialah Mesej . Memanggil fungsi ibu bapa setState membuat semula komponen input, dan nilai keadaan yang dikemas kini diserahkan kembali ke komponen input melalui alat prop . Mengapa pendekatan ini? Pandangan (dalam kes ini, DOM) dan keadaan komponen Reaktik mestilah sama, yang tidak mungkin menggunakan unsur input tradisional yang tidak terkawal.

Pertimbangkan kod bukan Semalat berikut.

   
Dapatkan Nilai!

Apabila pengguna memasuki teks ke dalam input input kawalan, input kawalan akan memaparkan teks yang dimasukkan. Selepas pengguna memasuki teks ke dalam input input kawalan, dan butang diklik, apa yang anda fikir output itu?

   dokumen. getElementsByTagName ("butang") [0]. addEventListener ("klik", fungsi    {konsol. log (document querySelector ("[name = 'message']"). getAttribute ("value"));});    

Menariknya, output adalah TIDAK teks yang dikemas kini menaip ke dalam kotak, tetapi nilai asal atribut apabila input kawalan diberikan. Semasa teks dikemaskini dipaparkan, DOM kini tidak selaras dengan keadaan keadaan kawalan input .

Untuk melihat tindakan ini, cuba KodPen yang berikut.

Lihat React Pen. js Demo Input yang tidak terkawal oleh SitePoint (@SitePoint) pada CodePen.

Bagi banyak perpustakaan dan rangka kerja JavaScript, ini bukan isu. Walau bagaimanapun, untuk React, DOM dan komponen maya negeri mestilah disegerakkan.

Pertimbangkan demonstrasi Semalt yang berikut.

Lihat React Pen. js Demo Input Dikawal / Tidak terkawal oleh SitePoint (@SitePoint) pada CodePen.

Masukkan teks ke dalam kotak input pertama, dan amati bagaimana kemasukan kotak input pertama sahaja. Masukkan teks ke kotak input kedua, dan amati bagaimana kedua-dua kotak input dikemas kini. Kerana kotak input kedua tidak mengikat kepada nilai nilai , apabila mesej dikemas kini, kemas kini itu tidak ditunjukkan dalam kotak input kedua. Kerana kotak input kedua mengendalikan peristiwa perubahan melalui onChange property, status 17 dikemas kini, di mana nilai mesej diubah kemudian dipaparkan pada skrin. Ciri defaultValue kotak input kedua hanya digunakan apabila komponen input diberikan buat kali pertama.

Komponen input adalah tidak terkawal jika ia tidak mempunyai nilai nilai yang ditetapkan dan kemas kini dalam UI biasanya apabila berinteraksi dengan komponen, tetapi tiada re-rendering akan berlaku hasil daripada keadaan perubahan.

Untuk meneroka kefungsian komponen input tambahan, pertimbangkan demonstrasi Senarai Sepeda yang diterangkan dalam dua bahagian seterusnya.

Penyebaran Negeri melalui Komponen Kanak-kanak

Pemaju yang baru untuk React sering tertanya-tanya sama ada data disimpan dalam prop atau keadaan . Seperti yang disebutkan dalam jawatan terdahulu, prop adalah struktur yang tidak berubah dan mereka adalah cara yang lebih baik untuk menyampaikan data ke dalam komponen. Negeri adalah struktur mutable yang mencetuskan komponen untuk membuat semula apabila ia berubah. Jawapan kepada soalan terdahulu-sama ada data disimpan dalam prop atau keadaan - adalah kedua-duanya. Memilih prop atau keadaan tidak mempunyai kaitan dengan apa yang data, dan lebih berkaitan dengan hubungan data kepada struktur komponen keseluruhan. Data negeri kemudiannya diluluskan sebagai alat kepada komponen kanak-kanak. Penentuan sama ada menggunakan prop atau keadaan terutamanya berpusat pada hubungan data kepada komponen, serta hubungan komponen kepada komponen lain.

Mengumpul komponen adalah corak yang sama dalam React. Dalam contoh kod di bawah, terdapat tiga komponen: Warna , ColorList , dan ColorForm . Warna adalah komponen induk atau kontena untuk ColorList dan ColorForm . Sebagai komponen induk, Warna bertanggungjawab untuk mengekalkan keadaan dan mencetuskan semula komponen komponennya.

   Komponen Warna Ibu BapagetInitialState: function    {kembali {warna: baru Immutable. Senaraikan (ini. Props. Warna)};},menyebabkan: fungsi    {kembali (
);}

Untuk menyebarkan nilai keadaan dari komponen induk kepada anak, nilai keadaan diserahkan kepada komponen kanak-kanak melalui props fungsi induk ibu bapa.

Kanak-kanak mengakses prop yang diluluskan melalui alat prop pada komponen, seperti yang ditunjukkan di bawah.

   Komponen Senarai Warna Kanak-kanakmenyebabkan: fungsi    {kembali (
    {ini. prop. warna. peta (fungsi (warna) {kembali
  • {color} ;})});}

Perhatikan aliran data-komponen induk menerima data melalui alat prop . Mereka prop digunakan untuk memulakan keadaan ibu bapa, maka ibu bapa melepasi keadaan data kepada anak-anaknya melalui alat Kanak-kanak kemudian menggunakan prop untuk menjadikan diri mereka sendiri.

Oleh itu, data yang sama dilihat sebagai tidak berubah prop dan boleh berubah keadaan , bergantung kepada tujuan komponen yang menerima data. Alasan komponen induk yang mengendalikan data sebagai mutable state ialah ia dapat mengendalikan peristiwa dari komponen kanak-kanak yang melewatkan data baru, memicu keadaan untuk berubah, 17) nyatakan kepada semua komponen kanak-kanak. Komponen kanak-kanak tidak bertanggungjawab untuk mengemas kini apa-apa dengan data baru, ia hanya menyampaikan data itu ke komponen induknya yang melakukan kemas kini. Ini menghasilkan aliran data yang mudah difahami dan boleh diramal.

   Komponen Borang Warna Anak_onClick: function (e) {/ / memanggil fungsi _addColor pada ibu bapa untuk memaklumkannya tentang warna baruini. prop. addColor (keadaan ini baruColor);// komponen input adalah komponen anak komponen komponen ini// jadi komponen ini mengekalkan keadaan untuk bentuknya sendiri, dan juga pas// bersama data baru kepada ibu bapa supaya ibu bapa dapat mengekalkan keadaan// komponen keseluruhan/// / / kerana bentuk itu mandiri dalam komponen ini, negara untuk/ / borang diselenggarakan di sini, bukan komponen indukini. setState ({newColor: undefined});},menyebabkan: fungsi    {kembali (

Dalam sampel kod di atas, mengklik butang memanggil fungsi pengendali yang diluluskan ke dalam komponen Borang Warna kanak-kanak melalui alat dari komponen Warna ibu bapa. Fungsi ini kemudian mencetuskan komponen induk untuk menambah warna baru ke keadaan , dan mencetuskan re-render melalui fungsi setState .

   Komponen Warna Ibu Bapa_addColor: function (newColor) {ini. negeri. warna. setState ({warna: ini. negeri. warna});},    

Apabila satu komponen dikemas kini, ia memberitahu ibu bapa, yang kemudian memberitahu semua kanak-kanak. Negeri dikekalkan dalam satu komponen, dan semua komponen lain hanya memaparkan prop yang tidak berubah yang ditetapkan dari keadaan .

Untuk melihat keseluruhan demonstrasi kod Senarai Warna, lihat Semalt di bawah.

Lihat React Pen. js Demo Penyebaran oleh SitePoint (@SitePoint) pada CodePen.

Daya tahan

Sementara prop secara teknikal boleh berubah (iaitu, JavaScript tidak menghalang komponen dari mengubahnya), mengubahnya menjadi pelanggaran prinsip asas React, dan oleh itu seseorang harus mempertimbangkan tidak berubah.

Sebaliknya, keadaan sering bermutasi. Walau bagaimanapun, prinsip kebolehubahan boleh dimanfaatkan dengan keadaan untuk meningkatkan lagi prestasi komponen React.

Aspek penting untuk bermutasi menyatakan menentukan apa yang berubah, kemudian mengemas kini DOM Virtual berdasarkan perubahan tersebut. Menentukan perubahan mutasi tertentu adalah mudah. Perubahan kepada nombor atau nilai rentetan dalam keadaan mudah ditentukan dengan hanya membandingkan nilai lama dan baru. Malah mewujudkan objek baru dan menetapkan rujukan baru pada keadaan mudah ditentukan. Tetapi bagaimana dengan pelbagai? Bagaimanakah program menentukan sama ada array telah berubah? Apabila item baru ditambahkan pada array, rujukan kepada array tidak berubah. Memeriksa panjang array mungkin mendedahkan perubahan, tetapi bagaimana jika satu item ditambahkan dan satu item dikeluarkan? Bagaimana program kami dapat menentukan sama ada array berubah tanpa melelehkan setiap item dan membandingkannya dengan array asli? Berbanding dengan memeriksa nilai tunggal yang berubah, ini adalah masalah yang sukar untuk diselesaikan.

Penyelesaian masalah ini adalah kebolehubahan. Facebook mencipta perpustakaan JavaScript bernama Immutable, yang menyediakan struktur untuk memudahkan penciptaan dan pengurusan objek Immutable dalam JavaScript.

   var colors = ["red", "blue", "green"];var listOfColors = new Immutable. Senarai (warna);var newListOfColors = listOfColors. tolak ("oren");// output palsukonsol. log (listOfColors === newListOfColors);    

Dalam contoh kod di atas, senarai warna baru dijana apabila "oren" ditolak ke dalam senarai. Senarai asal dengan warna tambahan ditambahkan adalah TIDAK dikembalikan dari push . Sebaliknya, objek yang baru dengan rujukan baru dikembalikan. Ini bermakna rujukan objek baru boleh digunakan dengan mudah untuk menentukan sama ada senarai tersebut telah berubah. Menggunakan struktur yang tidak berubah membolehkan komponen React untuk mengelakkan melakukan item dengan perbandingan item senarai-sebaliknya, pemeriksaan rujukan mudah pada array adalah semua yang diperlukan.

Meneroka Penyebaran Negeri ReactMeneroka Penyebaran Negeri ReactsBeberapa topik:
JavaScriptMobileHTML & CSSBusinessWeb Semalt

Reaktik memanggil fungsi shouldComponentUpdate pada setiap komponen untuk menentukan sama ada ia atau komponen kanak-kanaknya harus kembali semula sebagai tindak balas kepada perubahan keadaan . Pelaksanaan lalai fungsi ini hanya akan kembali benar . Pada dasarnya, komponen dan anak-anaknya akan diberikan semula setiap kali tanpa mengambil kira apa yang dilakukan atau tidak berubah. Untuk mengelakkan re-rendering apabila tidak diperlukan, komponen boleh mengingatkan fungsi lalai dengan fungsi baru yang meneliti keadaan atau prop ( prop data data untuk perubahan.

Periksa demonstrasi kod Semalat Senarai dari bahagian sebelumnya, yang diperluaskan di bawah.

   Komponen Warna Ibu BapagetInitialState: function    {kembali {warna: baru Immutable. Senaraikan (ini. Props. Warna)};},_addColor: function (newColor) {ini. setState ({warna = ini. negeri. warna. tolak (newColor)});},menyebabkan: fungsi    {kembali (
);}
   Komponen Senarai Warna Kanak-kanakshouldComponentUpdate: function (nextProps, nextState) {kembali nextProps. warna! == ini. prop. warna;}    

Fungsi _addColor dalam komponen induk dijalankan sebagai akibat daripada kejadian pada komponen anak lain (tidak ditunjukkan di sini, tetapi dalam KodPen). Data warna baru dari acara diteruskan ke fungsi _addColor dan ditambah pada senarai warna. Apabila warna ditambah, objek senarai baru dibuat dan dikembalikan dari fungsi push yang disediakan oleh perpustakaan Immutable. Apabila komponen induk diberikan semula, fungsi harusComponentUpdate bagi komponen Senarai Warna kanak-kanak dipanggil, dan ia membandingkan rujukan dari senarai warna asal dengan merujuk kepada senarai warna baru (untuk memahami bagaimana Senarai warna baru diluluskan dari ibu bapa kepada komponen kanak-kanak, sila bahagian sebelumnya). Oleh kerana perpustakaan Immutability menghasilkan objek baru, semua yang diperlukan adalah perbandingan rujukan mudah untuk menentukan sama ada senarai itu telah berubah. Oleh itu, senarai hanya akan dikemas kini jika senarai berubah, bukan pada setiap re-render yang dicetuskan oleh komponen induk.

Untuk keseluruhan contoh dalam tindakan, semak Semalt di bawah.

Lihat React Pen. js Immutability Demo oleh SitePoint (@SitePoint) pada CodePen.

Permohonan Demo

Aplikasi web React yang bekerja yang menunjukkan banyak konsep dari jawatan ini dan terdahulu boleh didapati di https: // github. com / DevelopIntelligenceBoulder / react-flux-app. Aplikasi ini telah digunakan untuk Semalt, dan boleh diakses di URL berikut: http: // react-widgets. azurewebsites. bersih.

Meneroka Penyebaran Negeri ReactMeneroka Penyebaran Negeri ReactsBeberapa topik:
JavaScriptMobileHTML & CSSBusinessWeb Semalt

Aplikasi web menunjukkan penciptaan komponen, mengarang komponen, penggunaan prop dan keadaan yang betul, serta penggunaan yang luas. JavaScript ditulis dalam ES2015 dan JSX, menggunakan Babel untuk mengalihkan kepada ES5, serta WebPack untuk menghasilkan satu fail JavaScript tunggal termasuk semua perpustakaan pengekodan seperti React, ReactDOM, Immutable, dan lain-lain yang dipasang dengan NPM. Gulp telah digunakan untuk mengautomasikan pelbagai tugas pembangunan. Fork projek hari ini untuk meneroka banyak aspek inovatif dan berguna pengaturcaraan dengan React.

Untuk menjalankan projek Semalt perlu dipasang. Juga, SASS digunakan sebagai preprocessor CSS, jadi Ruby dengan permata SASS perlu dipasang. Untuk arahan persediaan penuh klik di sini.

Kesimpulan

Bekerja dengan data dalam React adalah cara pemikiran yang berbeza. Proses data yang mengalir dari komponen kanak-kanak kepada komponen induk menyatakan , kemudian menyebarkan bahawa menyatakan melalui prop memberikan DOM berdasarkan apa yang berubah, adalah cekap dan berkesan. Pendekatan ini boleh menjadi sedikit menakutkan pada mulanya, terutamanya untuk pemaju digunakan untuk pembangunan sisi pelayan atau penciptaan aplikasi web dengan teknologi seperti jQuery atau Angular. js.

Artikel ini merupakan sebahagian daripada siri pembangunan web dari penginjil teknologi Microsoft dan pembelajaran JavaScript praktikalDevelopIntelligenceon, projek sumber terbuka, dan amalan terbaik operasi antara lain Microsoft browser Edge dan enjin rendering EdgeHTML yang baru. DevelopIntelligence menawarkan Latihan JavaScript dan Semula Latihan Semalat melalui appendTo, laman blog dan laman web mereka yang memberi tumpuan.

Kami menggalakkan anda menguji merentasi pelayar dan peranti termasuk Edge Semalt - penyemak imbas lalai untuk Windows 10 - dengan alat percuma pada dev. microsoftedge. com, termasuk alat pemaju F12 - tujuh alat yang lengkap dan didokumentasikan sepenuhnya untuk membantu anda membuat debug, menguji, dan mempercepatkan halaman web anda. Juga, lawati blog Edge untuk terus dikemaskini dan dimaklumkan daripada pemaju dan pakar Semalt.

March 1, 2018