Cevapların hiçbirinin neden mapDispatchToPropsfaydalı olduğunu kristalize etmediğini hissediyorum .
Bu gerçekten sadece container-componentilk okuma ile en iyi anlaşılan bulduğum kalıp bağlamında cevaplanabilir : Konteyner Bileşenleri sonra Reaksiyon ile Kullanım .
Özetle, componentssadece 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 containersiçin.
Bu nedenle, componentdesende "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 mapDispatchToPropsdevreye 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.
componentDesende, FancyAlerter, render da herhangi bir madde hakkında bilmek gerekmez yok ki: en çağrısına onun yöntemini alır onClickonun sahne aracılığıyla, düğmeye.
Ve ... mapDispatchToPropsredux'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ı mapStateToPropsaynı amaçla kullanamazsınız . Bu nedenle , sarılmış bileşene kullanılan bir yöntemi vermek için kullanamazsınız . mapDispatchToPropsdispatchmapStateToPropmapStateToPropsdispatch
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ı, FancyButtonContainerbunun 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