ฉันรู้สึกเหมือนไม่มีคำตอบใด ๆ ที่ตกผลึกทำไม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>
}
}
ดูวิธีการส่วนนี้ได้รับข้อมูลก็จะแสดงจากอุปกรณ์ประกอบฉาก (ซึ่งมาจากการจัดเก็บ Redux ผ่าน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ที่รู้เกี่ยวกับการดัดแปลงและการจัดส่งและการจัดเก็บและรัฐและสิ่งที่ ...
component
ในรูปแบบFancyAlerter
ซึ่งจะแสดงผลไม่จำเป็นต้องรู้เกี่ยวกับการใด ๆ ของสิ่งที่มันได้รับวิธีการของการเรียกร้องที่onClick
ปุ่มผ่านทางอุปกรณ์ประกอบฉากของมัน
และ ... mapDispatchToProps
เป็นวิธีที่มีประโยชน์ที่ redux จัดเตรียมเพื่อให้คอนเทนเนอร์ส่งผ่านฟังก์ชันนั้นไปยังส่วนประกอบที่ถูกห่อบนอุปกรณ์ประกอบฉากได้อย่างง่ายดาย
ทุกลักษณะนี้มากเช่นตัวอย่างเช่นสิ่งที่ต้องทำในเอกสารและคำตอบอื่นที่นี่ แต่ผมได้พยายามที่จะโยนมันทิ้งเสียในแง่ของรูปแบบที่จะเน้นว่าทำไม
(หมายเหตุ: คุณไม่สามารถใช้mapStateToProps
เพื่อจุดประสงค์เดียวmapDispatchToProps
กับเหตุผลพื้นฐานที่คุณไม่สามารถเข้าถึงdispatch
ภายในmapStateToProp
ได้ดังนั้นคุณจึงไม่สามารถใช้mapStateToProps
วิธีที่ส่วนประกอบที่ห่อไว้dispatch
ได้
ฉันไม่รู้ว่าทำไมพวกเขาเลือกที่จะแบ่งมันออกเป็นสองฟังก์ชั่นการทำแผนที่ - มันอาจจะเป็นเรื่องที่ยุ่งยากกว่าที่จะมีmapToProps(state, dispatch, props)
IE หนึ่งฟังก์ชั่นที่จะทำทั้งสองอย่าง!
1 โปรดทราบว่าฉันตั้งใจตั้งชื่อคอนเทนเนอร์อย่างชัดเจนFancyButtonContainer
เพื่อเน้นว่ามันเป็น "สิ่ง" - ตัวตน (และการมีอยู่จริง!) ของคอนเทนเนอร์เป็น "สิ่ง" บางครั้งก็หายไปในชวเลข
export default connect(...)
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
ไวยากรณ์ที่แสดงในตัวอย่างส่วนใหญ่