Saya mencoba memisahkan komponen presentasi dari komponen wadah. Saya memiliki a SitesTable
dan a SitesTableContainer
. Penampung bertanggung jawab untuk memicu tindakan redux untuk mengambil situs yang sesuai berdasarkan pengguna saat ini.
Masalahnya adalah pengguna saat ini diambil secara asinkron, setelah komponen penampung dirender pada awalnya. Ini berarti bahwa komponen penampung tidak mengetahui bahwa ia perlu menjalankan ulang kode dalam componentDidMount
fungsinya yang akan memperbarui data untuk dikirim ke SitesTable
. Saya rasa saya perlu merender ulang komponen kontainer ketika salah satu alat peraga (pengguna) berubah. Bagaimana cara melakukannya dengan benar?
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);