Cevapların hiçbirinin neden mapDispatchToProps
faydalı olduğunu kristalize etmediğini hissediyorum .
Bu gerçekten sadece container-component
ilk okuma ile en iyi anlaşılan bulduğum kalıp bağlamında cevaplanabilir : Konteyner Bileşenleri sonra Reaksiyon ile Kullanım .
Özetle, components
sadece bir şeyler sergilemekle ilgilenmeniz gerekiyor. Bilgi almaları gereken tek yer sahne .
"Sergileme materyallerinden" (bileşenler) ayrıdır:
- şeyleri nasıl görüntüleyeceğinizi,
- ve olayları nasıl ele aldığınızı.
Bunun containers
için.
Bu nedenle, component
desende "iyi tasarlanmış" şöyle görünür:
class FancyAlerter extends Component {
sendAlert = () => {
this.props.sendTheAlert()
}
render() {
<div>
<h1>Today's Fancy Alert is {this.props.fancyInfo}</h1>
<Button onClick={sendAlert}/>
</div>
}
}
Bu bileşenin görüntülediği bilgileri sahne alanından (redux mağazasından gelen mapStateToProps
) nasıl aldığını ve ayrıca eylem işlevini sahne alanlarından nasıl aldığını görün sendTheAlert()
.
İşte bu noktada mapDispatchToProps
devreye giriyor:container
// 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
)
Acaba görebilirsiniz, şimdi redux ve sevk ve depolamak ve devlet ve ... şeyler bilen container
1 olduğunu.
component
Desende, FancyAlerter
, render da herhangi bir madde hakkında bilmek gerekmez yok ki: en çağrısına onun yöntemini alır onClick
onun sahne aracılığıyla, düğmeye.
Ve ... mapDispatchToProps
redux'un, konteynerin bu işlevi destekleri üzerindeki sarılı bileşene kolayca geçirmesine izin vermesinin sağladığı kullanışlı araçtı.
Bütün bunlar dokümanlardaki todo örneğine çok benziyor ve burada başka bir cevap var, ama nedenini vurgulamak için onu desen ışığında kullanmaya çalıştım .
(Not: içeriye erişiminizin olmadığı temel nedenden dolayı mapStateToProps
aynı amaçla kullanamazsınız . Bu nedenle , sarılmış bileşene kullanılan bir yöntemi vermek için kullanamazsınız . mapDispatchToProps
dispatch
mapStateToProp
mapStateToProps
dispatch
Neden iki haritalama işlevi içine kırmak için seçtik bilmiyorum - mapToProps(state, dispatch, props)
her ikisini de IE bir işlevi olması daha düzenli olabilir !
1 Kabı kasten açık bir şekilde adlandırdığımı, FancyButtonContainer
bunun bir "şey" olduğunu vurgulamak için kullandığımı - kabın "bir şey" olarak kimliğinin (ve dolayısıyla varlığının!) Bazen stenoda kaybolduğunu unutmayın.
export default connect(...)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
çoğu örnekte gösterilen sözdizimi