javascript - 在成功的异步 redux 操作中转换到另一条路线

标签 javascript reactjs react-router redux

我有一组非常简单的 React 组件:

    挂接到 redux
  • container并处理操作、商店订阅等
  • list 显示我的项目列表
  • new 用于向列表中添加新项目的表单

我有一些 react-router路线如下:

<Route name='products' path='products' handler={ProductsContainer}>
  <Route name='productNew' path='new' handler={ProductNew} />
  <DefaultRoute handler={ProductsList} />
</Route>

以便显示 listform 但不会同时显示两者。

我想做的是在成功添加新项目后让应用程序重新路由回列表。

到目前为止,我的解决方案是在异步 dispatch 之后有一个 .then():

dispatch(actions.addProduct(product)
  .then(this.transitionTo('products'))
)

这是执行此操作的正确方法还是我应该以某种方式触发另一个操作来触发路由更改?

最佳答案

如果您不想使用更完整的解决方案,例如 Redux Router , 你可以使用 Redux History Transitions这让您可以编写如下代码:

export function login() {
  return {
    type: LOGGED_IN,
    payload: {
      userId: 123
    }
    meta: {
      transition: (state, action) => ({
        path: `/logged-in/${action.payload.userId}`,
        query: {
          some: 'queryParam'
        },
        state: {
          some: 'state'
        }
      })
    }
  };
}

这类似于 what you suggested但稍微复杂一点。它仍然使用相同的 history引擎盖下的库,因此它与 React Router 兼容。

关于javascript - 在成功的异步 redux 操作中转换到另一条路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612418/

相关文章:

javascript - 将溢出的内容从一个 div 转移到另一个 div

reactjs - 在 url 更改时,我想重新渲染我的组件,我应该怎么做

javascript - 花括号在 React 中声明一个变量

javascript - react 路由器浏览器后退按钮不起作用

javascript - 如何将二进制消息传递给 JavaScript Web Worker 或从 JavaScript Web Worker 传递二进制消息?

javascript - 如何在 jquery ajax 请求的数据参数中表示 json 数组?

javascript - 如何在多维数据集对象中交互子对象 - Three.js

javascript - 在宽度增加的元素中滚动时内容跳跃/不自然的移动

javascript - 如何根据属性正确处理订阅

javascript - 如何以不可变的方式更新数组