我有一个显示用户个人资料的Profile
组件。在路由更改为user/:userId
后,userId
查询参数将在ownProps
中更新,感谢react-router-redux
,然后将其传递到我的演示文稿组件中:
const mapStateToProps = (state, ownProps) => ({
userId: ownProps.params.userId,
user: store.profile.user //null at first, will be updated later
})
此时,我需要从userId
获取用户个人资料。我应该在哪里取这个?目前我在componentDidMount
componentDidMount() {
this.props.fetchProfile(this.props.userId) //this will dispatch an action to fetch user details and store in `store.profile.user`
}
这样做的缺点是,如果用户从/users/1
转到/users/2
,componentDidMount
将不会触发。该怎么做?
答案 0 :(得分:1)
您还需要从组件的this.props.fetchProfile
方法中调用componentDidUpdate
,并进行(可选)附加检查以查看userId
是否实际发生了更改。更好的是,你应该在一个单独的方法中包含fetchProfile
的调用,以防万一你想要在userId
为空时跳过调用。
fetchProfile() {
this.props.userId && this.props.fetchProfile(this.props.userId)
}
componentDidMount() {
this.fetchProfile()
}
componentDidUpdate (prevProps) {
prevProps.userId !== this.props.userId && this.fetchProfile()
}