Evet bu doğru. Durum özelliklerine erişmenin daha kolay bir yoluna sahip olmak için sadece bir yardımcı işlevi
posts
Uygulamanızda bir anahtarınız olduğunu düşününstate.posts
state.posts //
/*
{
currentPostId: "",
isFetching: false,
allPosts: {}
}
*/
Ve bileşen Posts
Varsayılan connect()(Posts)
olarak bağlı Bileşen için tüm durum aksesuarlarını kullanılabilir hale getirir
const Posts = ({posts}) => (
<div>
{/* access posts.isFetching, access posts.allPosts */}
</div>
)
Şimdi state.posts
bileşeninizle eşleştirdiğinizde biraz daha hoş olur
const Posts = ({isFetching, allPosts}) => (
<div>
{/* access isFetching, allPosts directly */}
</div>
)
connect(
state => state.posts
)(Posts)
mapDispatchToProps
normalde yazmak zorundasın dispatch(anActionCreator())
ile bindActionCreators
daha kolay gibi de yapabilir
connect(
state => state.posts,
dispatch => bindActionCreators({fetchPosts, deletePost}, dispatch)
)(Posts)
Şimdi bunu Bileşeninizde kullanabilirsiniz
const Posts = ({isFetching, allPosts, fetchPosts, deletePost }) => (
<div>
<button onClick={() => fetchPosts()} />Fetch posts</button>
{/* access isFetching, allPosts directly */}
</div>
)
ActionCreators üzerinde güncelleme ..
Bir actionCreator örneği: deletePost
const deletePostAction = (id) => ({
action: 'DELETE_POST',
payload: { id },
})
Yani, bindActionCreators
sadece eylemlerinizi alacak, onları dispatch
çağrıya sarın . (Redux'un kaynak kodunu okumadım, ancak uygulama şöyle görünebilir:
const bindActionCreators = (actions, dispatch) => {
return Object.keys(actions).reduce(actionsMap, actionNameInProps => {
actionsMap[actionNameInProps] = (...args) => dispatch(actions[actionNameInProps].call(null, ...args))
return actionsMap;
}, {})
}