मुझे लगता है कि जवाब में से कोई भी क्रिस्टलीकृत नहीं mapDispatchToProps
है कि उपयोगी क्यों है।
यह वास्तव में केवल container-component
पैटर्न के संदर्भ में उत्तर दिया जा सकता है , जो मुझे पहले पढ़ने से सबसे अच्छी तरह से समझ में आया: कंटेनर घटक फिर उपयोग के साथ प्रतिक्रिया ।
संक्षेप में, आपका components
केवल सामान प्रदर्शित करने से संबंधित होना चाहिए। वे जिस स्थान से जानकारी प्राप्त करने वाले हैं, वही उनकी सहारा है ।
"प्रदर्शन सामग्री" (घटकों) से अलग है:
- आपको प्रदर्शन करने के लिए सामान कैसे मिलेगा,
- और आप घटनाओं को कैसे संभालते हैं।
जो है उसी के लिए containers
हैं
इसलिए, component
पैटर्न में एक "अच्छी तरह से डिज़ाइन किया गया" इस तरह दिखता है:
class FancyAlerter extends Component {
sendAlert = () => {
this.props.sendTheAlert()
}
render() {
<div>
<h1>Today's Fancy Alert is {this.props.fancyInfo}</h1>
<Button onClick={sendAlert}/>
</div>
}
}
देखें कि इस घटक को प्रॉपर से प्रदर्शित होने वाली जानकारी कैसे मिलती है (जो कि रिड्यूक्स स्टोर से होकर आई है mapStateToProps
) और इसके प्रॉपर से इसका एक्शन फ़ंक्शन भी प्राप्त होता है sendTheAlert()
:।
इसी mapDispatchToProps
में आता है: इसी में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
)
मुझे आश्चर्य है कि अगर आप देख सकते हैं, अब यह container
1 है जो कि redux और डिस्पैच और स्टोर और स्टेट और ... सामान के बारे में जानता है।
component
पैटर्न में, FancyAlerter
, प्रतिपादन कि सामान में से किसी के बारे में पता करने की जरूरत है जो करता है नहीं करता है: यह कम से कॉल करने के लिए अपने विधि हो जाता है onClick
, बटन के अपने रंगमंच की सामग्री के माध्यम से।
और ... mapDispatchToProps
उपयोगी साधन था कि Redux कंटेनर को आसानी से उस फ़ंक्शन को उसके प्रॉप्स पर लिपटे घटक में पास करने देता है।
सभी बहुत डॉक्स में कार्य करने के उदाहरण की तरह इस दिखता है, और एक अन्य जवाब यहाँ है, लेकिन मैं पैटर्न के आलोक में यह कास्ट करने के लिए जोर देना कोशिश की है क्यों ।
(ध्यान दें: आप mapStateToProps
उसी उद्देश्य के लिए उपयोग नहीं कर सकते हैं mapDispatchToProps
जिस मूल कारण के लिए आपके dispatch
अंदर पहुंच नहीं है mapStateToProp
। इसलिए आप mapStateToProps
लिपटे घटक को उपयोग करने वाली विधि देने के लिए उपयोग नहीं कर सकते dispatch
।
मुझे नहीं पता कि उन्होंने इसे दो मानचित्रण कार्यों में तोड़ने के लिए क्यों चुना - यह mapToProps(state, dispatch, props)
दोनों करने के लिए IE एक कार्य करने के लिए निश्चित हो सकता है !
1 ध्यान दें कि मैंने जानबूझकर कंटेनर का नाम दिया था FancyButtonContainer
, यह उजागर करने के लिए कि यह एक "चीज़" है - कंटेनर की "चीज़" के रूप में पहचान (और इसलिए अस्तित्व!) कभी-कभी शॉर्टहैंड में खो जाती है।
export default connect(...)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
वाक्यविन्यास जो ज्यादातर उदाहरणों में दिखाया गया है