Sim, está correto. É apenas uma função auxiliar ter uma maneira mais simples de acessar as propriedades do seu estado
Imagine que você tem uma posts
chave no seu aplicativostate.posts
state.posts //
/*
{
currentPostId: "",
isFetching: false,
allPosts: {}
}
*/
E componente Posts
Por padrão connect()(Posts)
, todos os adereços de estado estarão disponíveis para o Componente conectado
const Posts = ({posts}) => (
<div>
{/* access posts.isFetching, access posts.allPosts */}
</div>
)
Agora, quando você mapeia o state.posts
componente, ele fica um pouco melhor
const Posts = ({isFetching, allPosts}) => (
<div>
{/* access isFetching, allPosts directly */}
</div>
)
connect(
state => state.posts
)(Posts)
mapDispatchToProps
normalmente você tem que escrever dispatch(anActionCreator())
com bindActionCreators
você pode fazê-lo também mais facilmente como
connect(
state => state.posts,
dispatch => bindActionCreators({fetchPosts, deletePost}, dispatch)
)(Posts)
Agora você pode usá-lo no seu Component
const Posts = ({isFetching, allPosts, fetchPosts, deletePost }) => (
<div>
<button onClick={() => fetchPosts()} />Fetch posts</button>
{/* access isFetching, allPosts directly */}
</div>
)
Atualização em actionCreators ..
Um exemplo de um actionCreator: deletePost
const deletePostAction = (id) => ({
action: 'DELETE_POST',
payload: { id },
})
Então, bindActionCreators
basta executar suas ações, envolvê-las em uma dispatch
chamada. (Eu não li o código fonte do redux, mas a implementação pode ser algo como isto:
const bindActionCreators = (actions, dispatch) => {
return Object.keys(actions).reduce(actionsMap, actionNameInProps => {
actionsMap[actionNameInProps] = (...args) => dispatch(actions[actionNameInProps].call(null, ...args))
return actionsMap;
}, {})
}