Saya menonton kursus Pluralsight on React dan instruktur menyatakan bahwa alat peraga tidak boleh diubah. Saya sekarang sedang membaca sebuah artikel (uberVU / reaksi-panduan) tentang alat peraga vs negara dan katanya
Perubahan props dan perubahan status memicu pembaruan render.
Kemudian di artikel itu tertulis:
Alat peraga (kependekan dari properti) adalah konfigurasi Komponen, opsi jika memungkinkan. Mereka diterima dari atas dan tidak berubah.
- Jadi alat peraga dapat berubah tetapi harus tidak berubah?
- Kapan Anda harus menggunakan alat peraga dan kapan Anda harus menggunakan status?
- Jika Anda memiliki data yang diperlukan komponen Bereaksi, haruskah itu diteruskan melalui alat peraga atau pengaturan di komponen Bereaksi via
getInitialState
?
javascript
reactjs
skaterdav85
sumber
sumber
Jawaban:
Alat peraga dan negara terkait. Keadaan satu komponen akan sering menjadi penyangga komponen anak. Alat peraga diteruskan ke anak dalam metode render orang tua sebagai argumen kedua
React.createElement()
atau, jika Anda menggunakan JSX, atribut tag yang lebih akrab.Nilai status orang tua
childsName
menjadi anakthis.props.name
. Dari sudut pandang anak, nama prop tidak dapat diubah. Jika perlu diubah, orang tua hanya perlu mengubah keadaan internalnya:dan Bereaksi akan menyebarkannya kepada anak untuk Anda. Pertanyaan tindak lanjut yang wajar adalah: bagaimana jika anak perlu mengganti namanya prop? Ini biasanya dilakukan melalui acara anak dan panggilan balik orang tua. Anak itu mungkin mengekspos suatu peristiwa yang disebut, misalnya
onNameChanged
,. Orang tua kemudian akan berlangganan acara tersebut dengan melewati penangan panggilan balik.Anak itu akan meneruskan nama baru yang diminta sebagai argumen untuk panggilan balik acara dengan memanggil, misalnya
this.props.onNameChanged('New name')
, dan orang tua akan menggunakan nama dalam pengendali acara untuk memperbarui keadaannya.sumber
Untuk komunikasi orang tua-anak, cukup lewati alat peraga.
Gunakan status untuk menyimpan data yang dibutuhkan halaman Anda saat ini di tampilan controller Anda.
Gunakan alat peraga untuk meneruskan data & penangan acara ke komponen anak Anda.
Daftar ini akan membantu memandu Anda ketika bekerja dengan data dalam komponen Anda.
Atribut
Negara
sumber
Sederhananya,
Keadaan adalah keadaan lokal dari komponen yang tidak dapat diakses dan dimodifikasi di luar komponen. Ini setara dengan variabel lokal dalam suatu fungsi.
Fungsi JS Biasa
Bereaksi Komponen
Alat peraga , di sisi lain, membuat komponen dapat digunakan kembali dengan memberikan komponen kemampuan untuk menerima data dari komponen induknya dalam bentuk alat peraga. Mereka setara dengan parameter fungsi.
Fungsi JS Biasa
Bereaksi Komponen
Penghargaan: Manoj Singh Negi
Artikel Link: React State vs Props menjelaskan
sumber
Ringkasan props vs state yang paling saya sukai ada di sini: panduan reaksi Tip topi besar untuk mereka. Di bawah ini adalah versi halaman yang diedit:
alat peraga vs negara
tl; dr Jika Komponen perlu mengubah salah satu atributnya pada suatu saat, atribut itu harus menjadi bagian dari kondisinya, jika tidak, itu hanya akan menjadi penyangga untuk Komponen itu.
Atribut
Alat peraga (kependekan dari properti) adalah konfigurasi Komponen. Mereka diterima dari atas dan tidak berubah sejauh Komponen yang menerimanya bersangkutan. Suatu Komponen tidak dapat mengubah alat peraga, tetapi ia bertanggung jawab untuk menyatukan alat peraga dari Komponen anaknya. Alat peraga tidak harus hanya berupa data - fungsi panggilan balik dapat dilewatkan sebagai alat peraga.
negara
Status adalah struktur data yang dimulai dengan nilai default ketika Komponen mount. Mungkin dimutasi sepanjang waktu, sebagian besar sebagai akibat dari peristiwa pengguna.
Komponen mengelola keadaannya sendiri secara internal. Selain menetapkan keadaan awal, ia tidak memiliki bisnis mengutak-atik keadaan anak-anaknya. Anda dapat mengkonsep negara sebagai pribadi ke komponen itu.
Mengubah alat peraga dan negara
Haruskah Komponen ini memiliki status?
Status adalah opsional. Karena status meningkatkan kompleksitas dan mengurangi kemampuan prediksi, Komponen tanpa kondisi lebih disukai. Meskipun Anda jelas tidak dapat melakukannya tanpa status dalam aplikasi interaktif, Anda harus menghindari memiliki terlalu banyak Komponen Nikmat.
Jenis komponen
Komponen Stateless Hanya Komponen , tidak ada status. Tidak banyak yang terjadi selain fungsi render (). Logika mereka berputar di sekitar alat peraga yang mereka terima. Ini membuat mereka sangat mudah diikuti, dan diuji.
Komponen stateful Baik alat peraga dan negara. Ini digunakan ketika komponen Anda harus mempertahankan beberapa keadaan. Ini adalah tempat yang baik untuk komunikasi klien-server (XHR, soket web, dll.), Memproses data dan menanggapi peristiwa pengguna. Logistik semacam ini harus dienkapsulasi dalam jumlah yang cukup dari Komponen Negara, sementara semua visualisasi dan pemformatan logika harus pindah ke hilir ke banyak Komponen Tanpa Negara.
sumber
sumber
Jadi sederhananya status terbatas pada komponen Anda saat ini tetapi alat peraga dapat diteruskan ke komponen apa pun yang Anda inginkan ... Anda dapat melewati status komponen saat ini sebagai penyangga untuk komponen lain ...
Juga dalam Bereaksi, kami memiliki komponen stateless yang hanya memiliki alat peraga dan bukan status internal ...
Contoh di bawah ini menunjukkan cara kerjanya di aplikasi Anda:
Induk (komponen negara penuh):
Anak (komponen tanpa-negara):
sumber
Perbedaan utama antara alat peraga dan keadaan adalah bahwa keadaan internal dan dikontrol oleh komponen itu sendiri sementara props eksternal dan dikendalikan oleh apa pun yang membuat komponen.
sumber
Pada dasarnya, perbedaannya adalah bahwa state adalah sesuatu seperti atribut dalam OOP : itu adalah sesuatu yang bersifat lokal untuk suatu kelas (komponen), yang digunakan untuk menggambarkannya dengan lebih baik. Alat peraga seperti parameter - mereka diteruskan ke komponen dari penelepon komponen (induk): seolah-olah Anda memanggil fungsi dengan parameter tertentu.
sumber
Kedua keadaan dan alat peraga dalam reaksi digunakan untuk mengontrol data menjadi suatu komponen, umumnya alat peraga diatur oleh orang tua dan diteruskan ke komponen anak dan mereka diperbaiki di seluruh komponen. Untuk data yang akan berubah, kita harus menggunakan status. Dan alat peraga tidak berubah sementara status bisa berubah , jika Anda ingin mengubah alat peraga yang dapat Anda lakukan dari komponen induk dan kemudian meneruskannya ke komponen turunan.
sumber
seperti yang saya pelajari saat bekerja dengan reaksi.
alat peraga digunakan oleh komponen untuk mendapatkan data dari lingkungan eksternal yaitu komponen lain (murni, fungsional atau kelas) atau kelas umum atau javascript / kode naskah
status digunakan untuk mengelola lingkungan internal suatu komponen berarti perubahan data di dalam komponen
sumber
Alat Peraga: Alat peraga tidak lain adalah properti dari komponen dan komponen reaksi tidak lain adalah fungsi javascript.
elemen const =;
di sini
<Welcome name="Sara" />
melewati objek {name: 'Sara'} sebagai alat peraga komponen Selamat Datang. Untuk meneruskan data dari satu komponen induk ke komponen turunan, kami menggunakan properti. Alat peraga tidak bisa diubah. Selama siklus hidup komponen, alat peraga tidak boleh berubah (menganggapnya tidak dapat diubah).Status: status hanya dapat diakses dalam Komponen. Untuk melacak data dalam komponen, kami menggunakan status. kita dapat mengubah status dengan setState. Jika kita perlu menyampaikan status kepada anak, kita harus menyampaikannya sebagai alat peraga.
sumber
Negara:
Atribut:
sumber
Pada dasarnya, alat peraga dan keadaan adalah dua cara komponen dapat mengetahui apa dan bagaimana membuatnya. Bagian mana dari status aplikasi milik negara dan yang ke beberapa toko tingkat atas, lebih terkait dengan desain aplikasi Anda, daripada bagaimana React bekerja. Cara paling sederhana untuk memutuskan, IMO, adalah dengan berpikir, apakah data tertentu ini berguna untuk aplikasi secara keseluruhan, atau itu adalah informasi lokal. Juga, penting untuk tidak menggandakan status, jadi jika sebagian data dapat dihitung dari alat peraga - itu harus dihitung dari alat peraga.
Sebagai contoh, katakanlah Anda memiliki beberapa kontrol dropdown (yang membungkus standar HTML pilih untuk styling kustom), yang dapat a) memilih beberapa nilai dari daftar, dan b) dibuka atau ditutup (yaitu, daftar opsi ditampilkan atau disembunyikan). Sekarang, katakanlah aplikasi Anda menampilkan daftar barang dari beberapa jenis dan filter kontrol dropdown Anda untuk entri daftar. Kemudian, akan lebih baik untuk melewatkan nilai filter aktif sebagai penyangga, dan tetap membuka / menutup status lokal. Selain itu, untuk membuatnya berfungsi, Anda akan meneruskan penangan onChange dari komponen induk, yang akan dipanggil di dalam elemen dropdown dan mengirim informasi yang diperbarui (filter baru yang dipilih) ke toko segera. Di sisi lain, keadaan buka / tutup dapat disimpan di dalam komponen dropdown, karena sisa aplikasi tidak terlalu peduli jika kontrol dibuka, sampai pengguna benar-benar mengubah nilainya.
Kode berikut ini tidak sepenuhnya berfungsi, perlu css dan menangani dropdown klik / blur / ubah acara, tapi saya ingin menyimpan contoh minimal. Semoga ini membantu untuk memahami perbedaannya.
sumber
Negara adalah cara bereaksi menangani informasi yang dipegang oleh komponen Anda.
Misalkan Anda memiliki komponen yang perlu mengambil beberapa data dari server. Anda biasanya ingin memberi tahu pengguna jika permintaan sedang diproses, jika gagal, dll. Ini adalah informasi yang hanya relevan untuk komponen tertentu itu. Di sinilah negara memasuki permainan.
Biasanya cara terbaik untuk mendefinisikan status adalah sebagai berikut:
tetapi dalam implementasi terbaru dari reaksi asli yang dapat Anda lakukan:
Dua contoh ini dieksekusi dengan cara yang persis sama, itu hanya peningkatan sintaksis.
Jadi, apa yang berbeda dari hanya menggunakan atribut objek seperti yang selalu kita miliki dalam pemrograman OO? Biasanya, informasi yang disimpan di negara Anda tidak dimaksudkan untuk menjadi statis, itu akan berubah seiring waktu dan Tampilan Anda perlu diperbarui untuk mencerminkan perubahan ini. Negara menawarkan fungsi ini dengan cara sederhana.
Negara DIMAKSUDKAN UNTUK DIMINTA! dan saya tidak bisa cukup menekankan hal ini. Apa artinya ini? Ini berarti bahwa Anda TIDAK PERNAH melakukan sesuatu seperti ini.
Cara yang tepat untuk melakukannya adalah:
Menggunakan this.setState komponen Anda berjalan melalui siklus pembaruan dan jika ada bagian negara yang berubah, metode komponen render Anda akan dipanggil lagi untuk mencerminkan perubahan ini.
Periksa dokumen reaksi untuk penjelasan yang lebih luas: https://facebook.github.io/react/docs/state-and-lifecycle.html
sumber
Alat peraga hanyalah singkatan untuk properti. Alat peraga adalah bagaimana komponen saling berbicara. Jika Anda sama sekali akrab dengan Bereaksi maka Anda harus tahu bahwa alat peraga mengalir ke bawah dari komponen induk.
Ada juga kasus bahwa Anda dapat memiliki alat peraga standar sehingga alat peraga diatur bahkan jika komponen induk tidak lulus alat peraga.
Inilah sebabnya mengapa orang menyebut React sebagai memiliki aliran data uni-directional. Ini membutuhkan sedikit perhatian Anda dan saya mungkin akan menulis blog tentang ini nanti, tetapi untuk sekarang hanya ingat: data mengalir dari orang tua ke anak. Alat peraga tidak berubah (kata yang bagus untuk itu tidak berubah)
Jadi kita bahagia. Komponen menerima data dari induk. Semua diurutkan, kan?
Ya tidak cukup. Apa yang terjadi ketika komponen menerima data dari orang lain selain dari orang tua? Bagaimana jika pengguna memasukkan data secara langsung ke komponen?
Nah, inilah mengapa kita memiliki keadaan.
NEGARA
Alat peraga seharusnya tidak berubah, jadi nyatakan langkah. Biasanya komponen tidak memiliki status dan disebut stateless. Komponen yang menggunakan status dikenal sebagai stateful. Jangan ragu untuk melepaskan berita gembira kecil itu di pesta-pesta dan melihat orang-orang menjauh dari Anda.
Jadi status digunakan sehingga komponen dapat melacak informasi di antara setiap perender yang dilakukannya. Ketika Anda mengaturState itu memperbarui objek negara dan kemudian merender komponen. Ini sangat keren karena itu berarti Bereaksi mengurus kerja keras dan sangat cepat.
Sebagai sedikit contoh keadaan, berikut ini cuplikan dari bilah pencarian (layak untuk memeriksa kursus ini jika Anda ingin mempelajari lebih lanjut tentang Bereaksi)
RINGKASAN
Alat peraga dan negara melakukan hal serupa tetapi digunakan dengan cara yang berbeda. Mayoritas komponen Anda mungkin tidak bernegara.
Alat peraga digunakan untuk meneruskan data dari orang tua ke anak atau oleh komponen itu sendiri. Mereka tidak berubah dan dengan demikian tidak akan diubah.
Status digunakan untuk data yang bisa diubah, atau data yang akan berubah. Ini sangat berguna untuk input pengguna. Pikirkan bilah pencarian misalnya. Pengguna akan mengetik data dan ini akan memperbarui apa yang mereka lihat.
sumber
Pendeknya.
sumber
negara - Ini adalah properti yang bisa berubah-ubah khusus yang menyimpan data Komponen. ini memiliki nilai default ketika Komponen mount.
Atribut - Ini adalah properti khusus yang tidak dapat diubah secara alami dan digunakan jika melewati nilai dari orangtua ke anak. alat peraga hanyalah saluran komunikasi antara Komponen, selalu bergerak dari atas (induk) ke buttom (anak).
di bawah ini adalah contoh lengkap dari penggabungan keadaan & alat peraga: -
sumber
Secara umum, keadaan satu komponen (induk) adalah penyangga untuk komponen anak.
Alat peraga pada umumnya tidak berubah.
Dalam kode di atas, kami memiliki kelas induk (Induk) yang memiliki nama sebagai statusnya yang diteruskan ke komponen anak (Kelas anak) sebagai penyangga dan komponen anak menjadikannya menggunakan {this.props.name}
sumber
Anda memiliki beberapa data yang dimasukkan oleh pengguna di suatu tempat di aplikasi.
komponen di mana data dimasukkan harus memiliki data ini dalam keadaannya karena perlu memanipulasi dan mengubahnya selama entri data
di tempat lain dalam aplikasi data harus diturunkan sebagai alat peraga untuk semua komponen lainnya
Jadi ya props berubah tetapi mereka diubah di 'sumber' dan kemudian akan mengalir dari sana. Jadi alat peraga tidak berubah dalam konteks komponen yang menerimanya .
Misalnya layar data referensi di mana pengguna mengedit daftar pemasok akan mengelola ini dalam keadaan, yang kemudian akan memiliki tindakan yang menyebabkan data yang diperbarui disimpan di ReferenceDataState yang bisa satu tingkat di bawah AppState dan kemudian daftar pemasok ini akan diteruskan sebagai alat peraga untuk semua komponen yang perlu menggunakannya.
sumber
Dalam Bereaksi, negara menyimpan data serta alat peraga. Perbedaannya dengan yang terakhir adalah bahwa data yang disimpan dapat dimodifikasi oleh perubahan yang berbeda. Ini tidak lebih dari objek yang ditulis dalam JavaScript datar, sehingga dapat berisi data atau kode, mewakili informasi yang ingin Anda modelkan. Jika Anda membutuhkan detail lebih lanjut, disarankan agar Anda melihat publikasi ini Penggunaan Negara dalam Bereaksi dan Penggunaan Alat Peraga dalam Bereaksi
sumber
sumber
Beberapa perbedaan antara "keadaan" dan "alat peraga" bereaksi.
Bereaksi kontrol dan merender DOM berdasarkan negara. Ada dua jenis status komponen: alat peraga adalah status yang mentransfer antar komponen, dan status adalah status internal komponen. Alat peraga digunakan untuk transfer data dari komponen induk ke komponen anak. Komponen-komponen tersebut juga memiliki keadaan di dalamnya: keadaan yang hanya dapat dimodifikasi di dalam komponen.
Secara umum keadaan komponen tertentu bisa menjadi penyangga komponen anak, alat peraga akan diberikan kepada anak-anak yang dinyatakan dalam metode rendering komponen induk
sumber
Atribut
alat peraga digunakan untuk melewatkan data dalam komponen anak
alat peraga mengubah nilai di luar komponen (komponen anak)
Negara
penggunaan negara di dalam komponen kelas
negara mengubah nilai di dalam komponen
Jika Anda merender halaman, Anda memanggil setState untuk memperbarui DOM (memperbarui nilai halaman)
Negara memiliki peran penting dalam bereaksi
sumber
Dalam menjawab pertanyaan awal tentang alat peraga yang tidak dapat diubah, mereka dikatakan tidak berubah sejauh menyangkut komponen anak tetapi dapat diubah pada orang tua.
sumber
React Components using state untuk MEMBACA / MENULIS variabel internal yang dapat diubah / dimutasi misalnya:
React props adalah objek khusus yang memungkinkan programmer untuk mendapatkan variabel dan metode dari Parent Component ke Child Component.
Itu seperti Windows dan pintu rumah. Alat peraga juga Komponen Anak yang kekal tidak dapat mengubah / memperbaruinya.
Ada beberapa metode yang membantu untuk mendengarkan ketika alat peraga diubah oleh Komponen Induk.
sumber
Ini adalah sudut pandang saya saat ini mengenai penjelasan antara negara dan alat peraga
Negara seperti variabel lokal Anda di dalam komponen Anda. Anda dapat memanipulasi nilai kondisi dengan menggunakan kondisi set. Anda kemudian dapat meneruskan nilai status ke komponen anak Anda misalnya.
Alat peraga adalah nilai yang persis berada di dalam toko redux Anda, ini sebenarnya berasal dari keadaan yang berasal dari peredam. Komponen Anda harus terhubung ke redux untuk mendapatkan nilai dari alat peraga. Anda juga dapat meneruskan nilai alat peraga Anda ke komponen anak Anda
sumber
Penjelasan sederhana adalah: STATE adalah keadaan komponen lokal misalnya color = "blue" atau animation = true dll. Gunakan this.setState untuk mengubah status komponen. PROPS adalah bagaimana komponen berbicara satu sama lain (mengirim data dari orang tua ke anak) dan membuat komponen dapat digunakan kembali.
sumber
Status adalah data Anda, dapat diubah, Anda dapat melakukan apa pun yang Anda butuhkan dengan itu, alat peraga hanya membaca data, biasanya ketika Anda lulus alat peraga Anda sudah bekerja dengan data Anda dan Anda memerlukan komponen anak untuk merendernya atau jika alat peraga Anda adalah berfungsi u panggil untuk melakukan tugas
sumber
Negara adalah asal dari kebenaran, tempat data Anda tinggal. Anda bisa mengatakan negara memanifestasikan dirinya melalui alat peraga.
Menyediakan alat peraga untuk komponen adalah apa yang membuat UI Anda tetap sinkron dengan data Anda. Komponen sebenarnya hanya fungsi yang mengembalikan markup.
Mengingat alat peraga yang sama (data untuk ditampilkan) itu akan selalu menghasilkan markup yang sama .
Jadi alat peraga seperti pipa yang membawa data dari asal ke komponen fungsional.
sumber
Alat peraga: merepresentasikan data "hanya baca", yang tidak dapat diubah dan merujuk ke atribut dari komponen orang tua.
Status: merupakan data yang dapat berubah, yang pada akhirnya memengaruhi apa yang dirender pada halaman dan dikelola secara internal oleh komponen itu sendiri dan berubah dari waktu ke waktu umumnya karena input Pengguna.
sumber
Perbedaan utama adalah bahwa negara bersifat pribadi untuk komponen dan dapat diubah di dalam komponen itu hanya sementara alat peraga hanya nilai statis dan kunci untuk komponen anak yang dilewatkan melalui komponen induk dan tidak dapat diubah di dalam komponen anak
sumber