mapDispatchToProps 应该调度初始化操作吗?
Should mapDispatchToProps dispatch initialization actions?
假设一个无状态的功能性 UserProfile
组件显示给定 url 的用户数据。假设它被包裹在 connect(mapStateToProps, mapDispatchToProps)(UserProfile)
中。最后,假设一个缩减为 state.userProfile
的减速器。每当 url 发生变化时,我都需要重新初始化 state.userProfile
,所以想到的解决方案是从 mapDispatchToProps 中这样做:
function mapDispatchToProps(dispatch, ownProps) {
dispatch(fetchUser(ownProps.userId))
return {
...
}
}
假设 thunked fetchUser 通过与当前状态进行比较而忽略重复调用,这是可以接受的做法吗?或者是否存在与从该映射函数立即调用调度相关的问题?
这是不受支持的,随时可能中断。
mapDispatchToProps
本身应该没有副作用。
如果您需要调度操作以响应 prop 更改,您可以创建一个组件 class 并为此使用生命周期方法:
class UserProfile extends Component {
componentDidMount() {
this.props.fetchUser(this.props.id)
}
componentDidUpdate(prevProps) {
if (prevProps.id !== this.props.id) {
this.props.fetchUser(this.props.id)
}
}
// ...
}
假设一个无状态的功能性 UserProfile
组件显示给定 url 的用户数据。假设它被包裹在 connect(mapStateToProps, mapDispatchToProps)(UserProfile)
中。最后,假设一个缩减为 state.userProfile
的减速器。每当 url 发生变化时,我都需要重新初始化 state.userProfile
,所以想到的解决方案是从 mapDispatchToProps 中这样做:
function mapDispatchToProps(dispatch, ownProps) {
dispatch(fetchUser(ownProps.userId))
return {
...
}
}
假设 thunked fetchUser 通过与当前状态进行比较而忽略重复调用,这是可以接受的做法吗?或者是否存在与从该映射函数立即调用调度相关的问题?
这是不受支持的,随时可能中断。
mapDispatchToProps
本身应该没有副作用。
如果您需要调度操作以响应 prop 更改,您可以创建一个组件 class 并为此使用生命周期方法:
class UserProfile extends Component {
componentDidMount() {
this.props.fetchUser(this.props.id)
}
componentDidUpdate(prevProps) {
if (prevProps.id !== this.props.id) {
this.props.fetchUser(this.props.id)
}
}
// ...
}