首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React路由器重定向丢弃参数

React路由器重定向丢弃参数
EN

Stack Overflow用户
提问于 2017-04-14 02:54:18
回答 7查看 24K关注 0票数 27

我使用的是React Router的next版本,它似乎正在删除参数。我希望下面的重定向保留channelId的值,但是to路由在路径中使用文字字符串":channelId“。

代码语言:javascript
运行
复制
<Switch>
  <Route exact path="/" component={Landing} />
  <Route path="/channels/:channelId/modes/:modeId" component={Window} />
  <Redirect
    from="/channels/:channelId"
    to="/channels/:channelId/modes/window" />
</Switch>

这看起来像resolved issue,但它不工作。是否还有其他东西需要传递到to路由?

EN

回答 7

Stack Overflow用户

发布于 2017-09-06 08:16:21

这是我一直在使用的答案,类似于其他答案,但没有依赖关系:

代码语言:javascript
运行
复制
<Route
  exact
  path="/:id"
  render={props => (
    <Redirect to={`foo/${props.match.params.id}/bar`} />;
  )}
/>
票数 21
EN

Stack Overflow用户

发布于 2017-06-12 22:51:25

我在React Router 4源代码中没有发现这样的逻辑,所以写下自己的解决方法:

代码语言:javascript
运行
复制
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import pathToRegexp from 'path-to-regexp';
import { Route, Redirect } from 'react-router-dom';

class RedirectWithParams extends Component {
  render() {
    const { exact, from } = this.props;    
    return (
      <Route
        exact={exact}
        path={from}
        component={this.getRedirectComponent}
      />);
  }

  getRedirectComponent = ({ match: { params } }) => {
    const { push, to } = this.props;
    const pathTo = pathToRegexp.compile(to);
    return <Redirect to={pathTo(params)} push={push} />
  }
};

RedirectWithParams.propTypes = {
  exact: PropTypes.bool,
  from: PropTypes.string,
  to: PropTypes.string.isRequired,
  push: PropTypes.bool
};

export default RedirectWithParams;

使用示例:

代码语言:javascript
运行
复制
<Switch>
   <RedirectWithParams
      exact from={'/resuorce/:id/section'}
      to={'/otherResuorce/:id/section'}
   />
</Switch>
票数 10
EN

Stack Overflow用户

发布于 2017-10-26 00:02:38

您可以这样做:

代码语言:javascript
运行
复制
<Switch>
  <Route exact path="/" component={Landing} />
  <Route path="/channels/:channelId/modes/:modeId" component={Window} />
  <Route
    exact
    path="/channels/:channelId"
    render={({ match }) => (
      <Redirect to={`/channels/${match.params.channelId}/modes/window`} />   
    )}
  />
</Switch>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43399740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档