Ya itu benar. Ini hanya fungsi pembantu untuk memiliki cara yang lebih sederhana untuk mengakses properti negara Anda
Bayangkan Anda memiliki posts
kunci di Aplikasi Andastate.posts
state.posts //
/*
{
currentPostId: "",
isFetching: false,
allPosts: {}
}
*/
Dan komponen Posts
Secara default connect()(Posts)
akan membuat semua alat peraga keadaan tersedia untuk Komponen yang terhubung
const Posts = ({posts}) => (
<div>
{/* access posts.isFetching, access posts.allPosts */}
</div>
)
Sekarang ketika Anda memetakan state.posts
ke komponen Anda itu menjadi sedikit lebih baik
const Posts = ({isFetching, allPosts}) => (
<div>
{/* access isFetching, allPosts directly */}
</div>
)
connect(
state => state.posts
)(Posts)
mapDispatchToProps
biasanya kamu harus menulis dispatch(anActionCreator())
dengan bindActionCreators
Anda bisa melakukannya juga lebih mudah suka
connect(
state => state.posts,
dispatch => bindActionCreators({fetchPosts, deletePost}, dispatch)
)(Posts)
Sekarang Anda dapat menggunakannya di Komponen Anda
const Posts = ({isFetching, allPosts, fetchPosts, deletePost }) => (
<div>
<button onClick={() => fetchPosts()} />Fetch posts</button>
{/* access isFetching, allPosts directly */}
</div>
)
Perbarui pada actionCreators ..
Contoh dari actionCreator: deletePost
const deletePostAction = (id) => ({
action: 'DELETE_POST',
payload: { id },
})
Jadi, bindActionCreators
hanya akan mengambil tindakan Anda, bungkus menjadi dispatch
panggilan. (Saya tidak membaca kode sumber redux, tetapi implementasinya mungkin terlihat seperti ini:
const bindActionCreators = (actions, dispatch) => {
return Object.keys(actions).reduce(actionsMap, actionNameInProps => {
actionsMap[actionNameInProps] = (...args) => dispatch(actions[actionNameInProps].call(null, ...args))
return actionsMap;
}, {})
}