예, 맞습니다. 상태 속성에 더 간단하게 액세스 할 수있는 도우미 함수일뿐입니다.
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;
}, {})
}