【发布时间】:2016-08-28 19:19:41
【问题描述】:
我正在尝试将展示组件与容器组件分开。我有一个SitesTable 和一个SitesTableContainer。容器负责触发 redux 操作以根据当前用户获取适当的站点。
问题是在容器组件最初呈现之后,当前用户是异步获取的。这意味着容器组件不知道它需要重新执行其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);
【问题讨论】:
-
如果你想在 props 改变时触发某些东西,你确实有一些其他可用的功能,比如 componentDidUpdate,或者可能是你正在寻找的那个,componentWillReceiveProps(nextProps)
-
如果 SitesTable 没有改变它的 props,为什么你需要重新渲染它?
-
@QoP 在
componentDidMount中调度的操作将更改应用程序状态下的sites节点,该节点被传递到SitesTable。 SitesStable 的sites节点将发生变化。 -
哦,我明白了,我要写答案了。
-
如何在一个功能组件中实现这一点
标签: reactjs redux react-redux