Ich versuche, eine Präsentationskomponente von einer Containerkomponente zu trennen. Ich habe ein SitesTable
und ein SitesTableContainer
. Der Container ist dafür verantwortlich, Redux-Aktionen auszulösen, um die entsprechenden Sites basierend auf dem aktuellen Benutzer abzurufen.
Das Problem ist, dass der aktuelle Benutzer asynchron abgerufen wird, nachdem die Containerkomponente anfänglich gerendert wurde. Dies bedeutet, dass die Containerkomponente nicht weiß, dass sie den Code in ihrer componentDidMount
Funktion erneut ausführen muss, um die an die zu sendenden Daten zu aktualisieren SitesTable
. Ich denke, ich muss die Containerkomponente neu rendern, wenn sich eine ihrer Requisiten (Benutzer) ändert. Wie mache ich das richtig?
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);