Sto provando a separare un componente di presentazione da un componente contenitore. Ho un SitesTable
e un SitesTableContainer
. Il contenitore è responsabile dell'attivazione di azioni di redux per recuperare i siti appropriati in base all'utente corrente. Il problema è che l'utente corrente viene prelevato in modo asincrono, dopo che il componente contenitore è stato reso inizialmente. Ciò significa che il componente contenitore non sa che è necessario rieseguire il codice nella sua funzione componentDidMount
che aggiornerebbe i dati da inviare allo SitesTable
. Penso che ho bisogno di rerender il componente contenitore quando uno dei suoi oggetti di scena (utente) cambia. Come faccio a farlo correttamente?il componente di risposta del rerender durante le modifiche del puntello
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);
avete alcune altre funzioni disponibili, come componentDidUpdate, o probabilmente il vostro cercando, componentWillReceiveProps (nextProps) se si vuole sparare qualcosa quando gli oggetti di scena modifiche – thsorens
Perché è necessario ri-renderizzare SitesTable se non sta cambiando i suoi oggetti di scena? – QoP
@QoP le azioni inviate in 'componentDidMount' cambieranno il nodo' sites' nello stato dell'applicazione, che viene passato in 'SitesTable'. Il nodo 'sites' di SitesStable cambierà. – David