我尝试在redux操作后导航到上一个屏幕。我将react-router
与react-router-redux
和redux-loop
一起使用。
以下是该方案:
/home
。/home/profile/1234
。this.props.dispatch(UserState.updateUser(id, user, history)
。/home
。这里有一些代码:
查看:
saveProfile = () => {
const user = {
name: this.state.name
}
this.props.dispatch(UserState.updateUser(this.state.id, user, this.props.history))
}
动作:
export function updateUser(id, user, history) {
return {
type: UPDATE_USER,
payload: {
id,
user,
history
}
}
}
减速机:
case UPDATE_USER:
return loop(
state.updateIn(['users', action.payload.id], user => user.merge(fromJS(action.payload.user))),
Effects.constant(action.payload.history.goBack())
)
这会导致错误Reducers may not dispatch actions
。
在另一个项目中,我使用了redux-saga
并且能够成功地将历史对象传递给saga并推送/ goBack。试图传递历史对象并在redux-loop
我正在为POC制作现有制作应用的更新导航系统,因此需要使用redux-loop
。
任何提示/帮助将不胜感激。如果我遗漏了任何有用的代码,请告诉我。
答案 0 :(得分:1)
我认为@ bradford-medeiros对于
的问题是正确的 Invalid argument supplied for foreach()
这是副作用,因此不应该在减速器中发生。您不应该传递历史对象。
不确定您拥有的Effects.constant(action.payload.history.goBack())
版本,但通常会有一些可能导致所需更改的操作。
react-router-redux