React native React路由器与Redux循环-还原器可能不调度操作
我正在尝试在重新执行操作后导航到上一个屏幕。我正在使用React native React路由器与Redux循环-还原器可能不调度操作,react-native,redux,react-router,react-router-redux,redux-loop,React Native,Redux,React Router,React Router Redux,Redux Loop,我正在尝试在重新执行操作后导航到上一个屏幕。我正在使用react-router和react-router-redux以及redux-loop 以下是场景: 在主屏幕上有一个用户列表/home 点击用户进入其个人资料/home/profile/1234 编辑用户名并点击保存this.props.dispatch(UserState.updateUser(id,user,history) 成功更新用户后,返回主屏幕/home 下面是一些代码: 查看: saveProfile = () => {
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())
)
行动:
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())
)
减速器:
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())
)
这会导致一个错误减速机可能无法调度操作
在另一个项目中,我使用了redux saga
,并且能够成功地将历史对象传递到saga和push/goBack。似乎在尝试传递历史对象并在redux循环中调用它时出现了一些问题
我正在为现有生产应用程序的更新导航系统开发POC,因此需要使用redux loop
任何提示/帮助都将不胜感激。如果我遗漏了任何有帮助的代码,请告诉我。我认为@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())
);
它会随着Effects.constant(action.payload.history.goBack())消失吗删除?我假设该库的内部实现导致调度一个操作,这可能是您代码其余部分的副作用。我猜是的。@BradfordMedeiros是的。这也是我的直觉。只是不确定如何正确处理此问题。谢谢提示。我尝试了此方法,尽管我不再使用它t错误,似乎什么也没有发生。看起来好像设置了redux操作,但屏幕上没有任何更改。有什么想法吗?如果您对可能出现的错误有任何想法,请参阅我的代码的公共repo。您似乎调用了createHistory两次。您传递给的历史对象需要与创建存储和middl时使用的历史对象相同电子软件。这将允许您发送的任何操作保持您的react组件树的同步。就是这样!非常感谢您,救了我一天。太好了!很高兴这有帮助。