React Router with Redux Loop - Reducers可能不会发送动作

时间:2018-04-20 18:43:44

标签: react-native redux react-router react-router-redux redux-loop

我尝试在redux操作后导航到上一个屏幕。我将react-routerreact-router-reduxredux-loop一起使用。

以下是该方案:

  1. 在主屏幕上显示用户列表/home
  2. 点按用户转到他们的个人资料/home/profile/1234
  3. 修改用户名称,然后点按保存this.props.dispatch(UserState.updateUser(id, user, history)
  4. 用户成功更新后,请返回主屏幕/home
  5. 这里有一些代码:

    查看:

    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

    任何提示/帮助将不胜感激。如果我遗漏了任何有用的代码,请告诉我。

1 个答案:

答案 0 :(得分:1)

我认为@ bradford-medeiros对于

的问题是正确的

Invalid argument supplied for foreach()

这是副作用,因此不应该在减速器中发生。您不应该传递历史对象。

不确定您拥有的Effects.constant(action.payload.history.goBack())版本,但通常会有一些可能导致所需更改的操作。

react-router-redux