Я пытаюсь отделить презентационный компонент от компонента контейнера. У меня есть SitesTable
и SitesTableContainer
. Контейнер отвечает за запуск действий сокращения, чтобы получить соответствующие сайты на основе текущего пользователя. Проблема заключается в том, что текущий пользователь выбирается асинхронно, после того как компонент контейнера получает рендеринг изначально. Это означает, что компонент контейнера не знает, что ему нужно повторно выполнить код в своей функции componentDidMount
, которая будет обновлять данные для отправки в . Думаю, мне нужно перегрузить компонент контейнера, когда один из его реквизита (пользователя) изменится. Как мне это сделать правильно?Компонент реагирования reerender при изменении prop
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);
у вас есть какие-то другие функции, доступные, как componentDidUpdate, или, возможно, одним вашим ищем, componentWillReceiveProps (nextProps), если вы хотите что-то срабатывает, когда реквизит изменения – thsorens
Зачем вам нужно повторно отображать SiteTable, если он не меняет свои реквизиты? – QoP
@QoP действия, отправленные в 'componentDidMount', изменят узел' sites' в состоянии приложения, который передается в 'SitesTable'. Узлы узлов сайта SitesStable будут меняться. – David