Я намагаюся відокремити презентаційний компонент від компонента контейнера. У мене є а SitesTable
і а SitesTableContainer
. Контейнер відповідає за активацію дій відновлення для отримання відповідних сайтів на основі поточного користувача.
Проблема полягає в тому, що поточний користувач отримується асинхронно після того, як компонент контейнера відтворюється спочатку. Це означає, що компонент контейнера не знає, що йому потрібно повторно виконати код у своїй componentDidMount
функції, яка буде оновлювати дані для надсилання до SitesTable
. Я думаю, мені потрібно повторно відтворити компонент контейнера, коли зміниться один із його реквізитів (користувач). Як мені це зробити правильно?
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);