React Router with Redux Loop - Reducers 可能不会分派动作
React Router with Redux Loop - Reducers may not dispatch actions
我正在尝试在 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 和 push/goBack。尝试传递历史对象并在 redux-loop
中调用它似乎发生了一些事情
我正在为现有生产应用程序的更新导航系统开发 POC,因此需要使用 redux-loop
。
任何 tips/help 将不胜感激。如果我遗漏了任何有用的代码,请告诉我。
我认为@bradford-medeiros 关于
的问题是正确的
Effects.constant(action.payload.history.goBack())
这是一个副作用,所以它不应该发生在减速器中。您不需要传递历史对象。
不确定您使用的 react-router-redux
是哪个版本,但它通常会公开一些可以导致您想要的更改的操作。
import {goBack} from 'react-router-redux';
//in reducer
return loop(
state.updateIn(['users', action.payload.id], user => user.merge(fromJS(action.payload.user))),
Effects.constant(goBack())
);
我正在尝试在 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 和 push/goBack。尝试传递历史对象并在 redux-loop
我正在为现有生产应用程序的更新导航系统开发 POC,因此需要使用 redux-loop
。
任何 tips/help 将不胜感激。如果我遗漏了任何有用的代码,请告诉我。
我认为@bradford-medeiros 关于
的问题是正确的Effects.constant(action.payload.history.goBack())
这是一个副作用,所以它不应该发生在减速器中。您不需要传递历史对象。
不确定您使用的 react-router-redux
是哪个版本,但它通常会公开一些可以导致您想要的更改的操作。
import {goBack} from 'react-router-redux';
//in reducer
return loop(
state.updateIn(['users', action.payload.id], user => user.merge(fromJS(action.payload.user))),
Effects.constant(goBack())
);