হ্যাঁ এটা সঠিক. আপনার রাষ্ট্রীয় বৈশিষ্ট্য অ্যাক্সেস করার সহজ উপায় পাওয়ার জন্য এটি কেবল একটি সহায়ক ফাংশন
কল্পনা করুন আপনার একটি 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
নিজের উপাদানটি মানচিত্র করবেন তখন এটি কিছুটা সুন্দর gets
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
। (আমি রিডুএক্সের উত্স কোডটি পড়িনি, তবে বাস্তবায়নটি এর মতো দেখতে লাগবে:
const bindActionCreators = (actions, dispatch) => {
return Object.keys(actions).reduce(actionsMap, actionNameInProps => {
actionsMap[actionNameInProps] = (...args) => dispatch(actions[actionNameInProps].call(null, ...args))
return actionsMap;
}, {})
}