Saya merasa tidak ada jawaban yang mengkristal mengapa mapDispatchToProps
berguna.
Ini benar-benar hanya dapat dijawab dalam konteks container-component
pola, yang saya temukan paling baik dipahami dengan membaca pertama: Komponen Kontainer kemudian Penggunaan dengan Bereaksi .
Singkatnya, Anda components
seharusnya hanya peduli dengan menampilkan barang-barang. Satu- satunya tempat mereka seharusnya mendapatkan informasi adalah alat peraga mereka .
Dipisahkan dari "menampilkan barang" (komponen) adalah:
- bagaimana Anda mendapatkan barang untuk ditampilkan,
- dan bagaimana Anda menangani acara.
Itu untuk apa containers
.
Oleh karena itu, "dirancang dengan baik" component
dalam pola terlihat seperti ini:
class FancyAlerter extends Component {
sendAlert = () => {
this.props.sendTheAlert()
}
render() {
<div>
<h1>Today's Fancy Alert is {this.props.fancyInfo}</h1>
<Button onClick={sendAlert}/>
</div>
}
}
Lihat bagaimana komponen ini mendapat info ini akan menampilkan dari alat peraga (yang datang dari toko redux melalui mapStateToProps
) dan juga mendapat fungsi aksinya dari alat peraga nya: sendTheAlert()
.
Di situlah mapDispatchToProps
masuk: dalam yang sesuaicontainer
// FancyButtonContainer.js
function mapDispatchToProps(dispatch) {
return({
sendTheAlert: () => {dispatch(ALERT_ACTION)}
})
}
function mapStateToProps(state) {
return({fancyInfo: "Fancy this:" + state.currentFunnyString})
}
export const FancyButtonContainer = connect(
mapStateToProps, mapDispatchToProps)(
FancyAlerter
)
Aku ingin tahu apakah Anda bisa lihat, sekarang bahwa itu adalah container
1 yang tahu tentang redux dan pengiriman dan menyimpan dan negara dan ... hal.
Dalam component
pola,, FancyAlerter
yang melakukan rendering tidak perlu tahu tentang hal-hal itu: ia mendapatkan metodenya untuk memanggil onClick
tombol, melalui alat peraga.
Dan ... mapDispatchToProps
adalah alat yang berguna yang disediakan redux untuk membiarkan wadah dengan mudah melewatkan fungsi itu ke komponen terbungkus pada alat peraga.
Semua ini sangat mirip dengan contoh todo dalam dokumen, dan jawaban lain di sini, tetapi saya telah mencoba memberikannya pada pola untuk menekankan alasannya .
(Catatan: Anda tidak dapat menggunakan mapStateToProps
untuk tujuan yang sama seperti mapDispatchToProps
untuk alasan dasar bahwa Anda tidak memiliki akses ke dispatch
dalam mapStateToProp
. Jadi, Anda tidak dapat menggunakan mapStateToProps
metode komponen yang digunakan komponen terbungkus dengan metode yang digunakan dispatch
.
Saya tidak tahu mengapa mereka memilih untuk memecahnya menjadi dua fungsi pemetaan - mungkin lebih rapi untuk memiliki mapToProps(state, dispatch, props)
IE satu fungsi untuk melakukan keduanya!
1 Catat bahwa saya sengaja menamakan wadah itu FancyButtonContainer
, untuk menyoroti bahwa itu adalah "benda" - identitas (dan karenanya keberadaan!) Dari wadah itu sebagai "benda" kadang-kadang hilang di steno.
export default connect(...)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
sintaks yang ditunjukkan dalam kebanyakan contoh