Saya mencoba memahami metode koneksi dari reaksi-redux, dan fungsi yang dibutuhkan sebagai parameter. Khususnya mapStateToProps()
.
Cara saya memahaminya, nilai pengembalian mapStateToProps
akan menjadi objek yang berasal dari negara (seperti yang tinggal di toko), yang kunci-kuncinya akan diteruskan ke komponen target Anda (menghubungkan komponen diterapkan ke) sebagai alat peraga.
Ini berarti bahwa keadaan yang dikonsumsi oleh komponen target Anda dapat memiliki struktur yang sangat berbeda dari keadaan saat disimpan di toko Anda.
T: Apakah ini OK?
T: Apakah ini diharapkan?
T: Apakah ini anti-pola?
javascript
reactjs
redux
react-redux
Pablo Barría Urenda
sumber
sumber
this.props.someData
sebagai lawan darithis.props.someKey[someOtherKey].someData
... masuk akal?Jawaban:
T:
Is this ok?
A: ya
T:
Is this expected?
Ya, ini diharapkan (jika Anda menggunakan react-redux).
T:
Is this an anti-pattern?
A: Tidak, ini bukan anti-pola.
Ini disebut "menghubungkan" komponen Anda atau "membuatnya pintar". Ini dengan desain.
Ini memungkinkan Anda memisahkan komponen dari keadaan Anda waktu tambahan yang meningkatkan modularitas kode Anda. Ini juga memungkinkan Anda untuk menyederhanakan keadaan komponen Anda sebagai bagian dari keadaan aplikasi Anda yang, pada kenyataannya, membantu Anda mematuhi pola Redux.
Pikirkan seperti ini: toko seharusnya berisi seluruh keadaan aplikasi Anda.
Untuk aplikasi besar, ini bisa berisi lusinan properti bersarang banyak lapisan dalam.
Anda tidak ingin mengangkut semua yang ada di setiap panggilan (mahal).
Tanpa
mapStateToProps
atau beberapa analognya, Anda akan tergoda untuk mengukir keadaan Anda dengan cara lain untuk meningkatkan kinerja / menyederhanakan.sumber
(1) -
Akses yang lebih mudah(2) -
Hindari bug di mana komponen dapat mengacaukan keadaan yang bukan miliknyaYa itu benar. Ini hanya fungsi pembantu untuk memiliki cara yang lebih sederhana untuk mengakses properti negara Anda
Bayangkan Anda memiliki
posts
kunci di Aplikasi Andastate.posts
Dan komponen
Posts
Secara default
connect()(Posts)
akan membuat semua alat peraga keadaan tersedia untuk Komponen yang terhubungSekarang ketika Anda memetakan
state.posts
ke komponen Anda itu menjadi sedikit lebih baikmapDispatchToProps
biasanya kamu harus menulis
dispatch(anActionCreator())
dengan
bindActionCreators
Anda bisa melakukannya juga lebih mudah sukaSekarang Anda dapat menggunakannya di Komponen Anda
Perbarui pada actionCreators ..
Contoh dari actionCreator:
deletePost
Jadi,
bindActionCreators
hanya akan mengambil tindakan Anda, bungkus menjadidispatch
panggilan. (Saya tidak membaca kode sumber redux, tetapi implementasinya mungkin terlihat seperti ini:sumber
dispatch => bindActionCreators({fetchPosts, deletePost}, dispatch)
mendapatkanfetchPosts
dandeletePost
tindakan dilewatkan?state => state.posts
(mapStateToProps
fungsi) akan memberitahu Bereaksi keadaan apa yang akan memicu re-render komponen ketika diperbarui.Anda mendapatkan bagian pertama yang benar:
Ya
mapStateToProps
memiliki status Store sebagai argumen / param (disediakan olehreact-redux::connect
) dan digunakan untuk menghubungkan komponen dengan bagian tertentu dari state store.Dengan menghubungkan maksud saya objek yang dikembalikan oleh
mapStateToProps
akan diberikan pada waktu konstruksi sebagai alat peraga dan setiap perubahan berikutnya akan tersedia melaluicomponentWillReceiveProps
.Jika Anda tahu pola desain Observer, itu persis variasi kecil itu.
Contoh akan membantu memperjelas:
Mungkin ada komponen reaksi lain yang disebut
itemsFilters
yang menangani tampilan dan mempertahankan status filter ke status Redux Store, komponen Demo adalah "mendengarkan" atau "berlangganan" ke filter status Redux Store sehingga setiap kali filter menyatakan perubahan kondisi toko (dengan bantuanfiltersComponent
) bereaksi -redux mendeteksi bahwa ada perubahan dan memberitahukan atau "mempublikasikan" semua komponen yang mendengarkan / berlangganan dengan mengirimkan perubahan yang merekacomponentWillReceiveProps
dalam contoh ini akan memicu penyaringan item dan menyegarkan tampilan karena fakta bahwa keadaan reaksi telah berubah .Beri tahu saya jika contohnya membingungkan atau tidak cukup jelas untuk memberikan penjelasan yang lebih baik.
Adapun: Ini berarti bahwa keadaan yang dikonsumsi oleh komponen target Anda dapat memiliki struktur yang sangat berbeda dari keadaan seperti yang disimpan di toko Anda.
Saya tidak mendapatkan pertanyaan, tetapi hanya tahu bahwa keadaan reaksi (
this.setState
) sama sekali berbeda dari keadaan Toko Redux!Keadaan reaksi digunakan untuk menangani redraw dan perilaku komponen reaksi. Keadaan bereaksi terkandung ke komponen secara eksklusif.
Keadaan Redux Store adalah kombinasi dari kondisi reduksi Redux, masing-masing bertanggung jawab mengelola sebagian kecil logika aplikasi. Atribut reduksi tersebut dapat diakses dengan bantuan
react-redux::connect@mapStateToProps
komponen apa pun! Yang membuat aplikasi negara toko Redux dapat diakses secara luas sementara status komponen eksklusif untuk dirinya sendiri.sumber
Ini bereaksi & redux contoh didasarkan dari contoh Mohamed Mellouki ini. Tetapi memvalidasi menggunakan aturan prettify dan linting . Perhatikan bahwa kami mendefinisikan alat peraga dan metode pengiriman kami menggunakan PropTypes sehingga kompiler kami tidak meneriaki kami. Contoh ini juga termasuk beberapa baris kode yang telah hilang dalam contoh Mohamed. Untuk menggunakan koneksi, Anda harus mengimpornya dari react-redux . Contoh ini juga mengikat metode filterItems ini akan mencegah masalah lingkup dalam komponen . Kode sumber ini telah diformat secara otomatis menggunakan JavaScript Prettify .
Kode contoh ini adalah templat yang baik untuk tempat awal untuk komponen Anda.
sumber
React-Redux
connect
digunakan untuk memperbarui toko untuk setiap tindakan.Ini sangat sederhana dan jelas dijelaskan di blog ini .
Anda dapat mengkloning proyek github atau menyalin kode dari blog tersebut untuk memahami koneksi Redux.
sumber
Berikut ini outline / boilerplate untuk menjelaskan perilaku
mapStateToProps
:(Ini adalah implementasi yang sangat disederhanakan dari apa yang dilakukan wadah Redux.)
dan selanjutnya
sumber
}
}
sumber