Estou tentando separar um componente de apresentação de um componente de contêiner. Eu tenho um SitesTable
e um SitesTableContainer
. O contêiner é responsável por acionar ações de redux para buscar os sites apropriados com base no usuário atual.
O problema é que o usuário atual é buscado de forma assíncrona, depois que o componente do contêiner é renderizado inicialmente. Isso significa que o componente do contêiner não sabe que precisa reexecutar o código em sua componentDidMount
função, o que atualizaria os dados a serem enviados ao SitesTable
. Acho que preciso renderizar novamente o componente do contêiner quando um de seus adereços (usuário) muda. Como faço isso corretamente?
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);