Próbuję oddzielić składnik prezentacji od składnika kontenera. Mam SitesTable
i SitesTableContainer
. Kontener jest odpowiedzialny za wyzwalanie działań redukujących w celu pobrania odpowiednich witryn na podstawie bieżącego użytkownika.
Problem polega na tym, że bieżący użytkownik jest pobierany asynchronicznie, po początkowym renderowaniu komponentu kontenera. Oznacza to, że komponent kontenera nie wie, że musi ponownie wykonać kod w swojej componentDidMount
funkcji, który zaktualizowałby dane do wysłania do SitesTable
. Myślę, że muszę ponownie wyrenderować komponent kontenera, gdy zmieni się jeden z jego właściwości (użytkownika). Jak mam to zrobić poprawnie?
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);