Si es correcto. Es solo una función auxiliar para tener una forma más simple de acceder a sus propiedades de estado
Imagina que tienes una posts
clave en tu aplicaciónstate.posts
state.posts //
/*
{
currentPostId: "",
isFetching: false,
allPosts: {}
}
*/
Y componente Posts
Por defecto connect()(Posts)
, todos los accesorios de estado estarán disponibles para el Componente conectado
const Posts = ({posts}) => (
<div>
{/* access posts.isFetching, access posts.allPosts */}
</div>
)
Ahora, cuando asigna el state.posts
componente a su componente, se vuelve un poco más agradable
const Posts = ({isFetching, allPosts}) => (
<div>
{/* access isFetching, allPosts directly */}
</div>
)
connect(
state => state.posts
)(Posts)
mapDispatchToProps
normalmente tienes que escribir dispatch(anActionCreator())
con bindActionCreators
usted puede hacerlo también más fácilmente como
connect(
state => state.posts,
dispatch => bindActionCreators({fetchPosts, deletePost}, dispatch)
)(Posts)
Ahora puedes usarlo en tu Componente
const Posts = ({isFetching, allPosts, fetchPosts, deletePost }) => (
<div>
<button onClick={() => fetchPosts()} />Fetch posts</button>
{/* access isFetching, allPosts directly */}
</div>
)
Actualización sobre actionCreators ..
Un ejemplo de un actionCreator: deletePost
const deletePostAction = (id) => ({
action: 'DELETE_POST',
payload: { id },
})
Entonces, bindActionCreators
solo tomará sus acciones, las envolverá en la dispatch
llamada. (No leí el código fuente de redux, pero la implementación podría verse así:
const bindActionCreators = (actions, dispatch) => {
return Object.keys(actions).reduce(actionsMap, actionNameInProps => {
actionsMap[actionNameInProps] = (...args) => dispatch(actions[actionNameInProps].call(null, ...args))
return actionsMap;
}, {})
}