Estoy tratando de separar un componente de presentación de un componente de contenedor. Tengo un SitesTable
y un SitesTableContainer
. El contenedor es responsable de desencadenar acciones redux para buscar los sitios apropiados según el usuario actual.
El problema es que el usuario actual se recupera de forma asincrónica, después de que el componente contenedor se procesa inicialmente. Esto significa que el componente contenedor no sabe que necesita volver a ejecutar el código en su componentDidMount
función, lo que actualizaría los datos para enviarlos a SitesTable
. Creo que necesito volver a renderizar el componente contenedor cuando cambia uno de sus accesorios (usuario). ¿Cómo hago esto correctamente?
class SitesTableContainer extends React.Component {
static get propTypes() {
return {
sites: React.PropTypes.object,
user: React.PropTypes.object,
isManager: React.PropTypes.boolean
}
}
componentDidMount() {
if (this.props.isManager) {
this.props.dispatch(actions.fetchAllSites())
} else {
const currentUserId = this.props.user.get('id')
this.props.dispatch(actions.fetchUsersSites(currentUserId))
}
}
render() {
return <SitesTable sites={this.props.sites}/>
}
}
function mapStateToProps(state) {
const user = userUtils.getCurrentUser(state)
return {
sites: state.get('sites'),
user,
isManager: userUtils.isManager(user)
}
}
export default connect(mapStateToProps)(SitesTableContainer);