はい、それは正しいです。状態プロパティにアクセスするためのより簡単な方法を持つための単なるヘルパー関数
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>
)
actionCreatorsの最新情報。
actionCreatorの例: 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;
}, {})
}