हाँ यह सही है। अपने राज्य गुणों का उपयोग करने का एक सरल तरीका होने के लिए यह सिर्फ एक सहायक कार्य है
कल्पना कीजिए कि posts
आपके ऐप में एक कुंजी हैstate.posts
state.posts //
/*
{
currentPostId: "",
isFetching: false,
allPosts: {}
}
*/
और घटक Posts
डिफ़ॉल्ट रूप connect()(Posts)
से जुड़े हुए घटक के लिए सभी राज्य सहारा उपलब्ध कराएंगे
const Posts = ({posts}) => (
<div>
{/* access posts.isFetching, access posts.allPosts */}
</div>
)
अब जब आप state.posts
अपने कंपोनेंट को मैप करते हैं तो यह थोड़ा अच्छा हो जाता है
const Posts = ({isFetching, allPosts}) => (
<div>
{/* access isFetching, allPosts directly */}
</div>
)
connect(
state => state.posts
)(Posts)
mapDispatchToProps
आम तौर पर आपको लिखना होगा dispatch(anActionCreator())
साथ bindActionCreators
आप यह भी अधिक आसानी से कर सकते हैं
connect(
state => state.posts,
dispatch => bindActionCreators({fetchPosts, deletePost}, dispatch)
)(Posts)
अब आप इसे अपने घटक में उपयोग कर सकते हैं
const Posts = ({isFetching, allPosts, fetchPosts, deletePost }) => (
<div>
<button onClick={() => fetchPosts()} />Fetch posts</button>
{/* access isFetching, allPosts directly */}
</div>
)
एक्शन क्रिएटर्स पर अपडेट करें ..
एक्शन क्रिएटर का एक उदाहरण: deletePost
const deletePostAction = (id) => ({
action: 'DELETE_POST',
payload: { id },
})
तो, bindActionCreators
बस अपने कार्यों को ले जाएगा, उन्हें dispatch
कॉल में लपेटें । (मैंने redux का सोर्स कोड नहीं पढ़ा है, लेकिन कार्यान्वयन कुछ इस तरह दिख सकता है:
const bindActionCreators = (actions, dispatch) => {
return Object.keys(actions).reduce(actionsMap, actionNameInProps => {
actionsMap[actionNameInProps] = (...args) => dispatch(actions[actionNameInProps].call(null, ...args))
return actionsMap;
}, {})
}