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

  • container连接到redux并处理操作、存储订阅等
  • list显示我的项目列表
  • new这是一个向列表中添加新项目的表单

我有大约react-router条路由如下:

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

因此,listform都会显示,但不会同时显示.

我想做的是,一旦成功添加了一个新项目,应用程序就会重新路由回列表.

到目前为止,我的解决方案是在async 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路由兼容.

Reactjs相关问答推荐

删除表2的收件箱未按预期工作

从`redux—thunk`导入thunk `在stackblitz中不起作用

如何在取数后添加新数据,并在页面上保存旧数据?

如何通过浏览器路由在单独的.jsx文件中使用MUI抽屉?

替换谷歌 map api默认信息窗口与自定义

Reaction-路由v6动态路径RegExp

为什么React UseEffect挂钩在页面重新加载时运行

当 URL 与我声明的任何路由都不匹配时,如何使用不会重定向到错误页面的动态 URL? - react 路由 dom

useMemo 依赖项的行为

在react的useEffect钩子中,我的函数被调用,但只有第一个函数能够改变状态,第二个函数无法改变状态.

在MongoDB中,如何获取最后N条记录中字段不为空或不为空字符串的数据

无法在react 中向表中添加行

如何覆盖自定义 MUI 手风琴的样式(分隔线和折叠图标)

Firebase Storage: 对象不存在图片上传路径错误

根据其中的值不同地react setState 更新状态

损坏的图像 React useState

作为单个变量的 React 组件是否比 memoized 组件渲染得更快?

Select 建议后如何关闭 vscode 添加自动完成={}

如何使图标适合 react-bootstrap 中的行元素

axios post方法中的请求失败,状态码为500错误