【问题标题】:Omitting an optional parameter, which is before another optional parameter in React Router省略一个可选参数,它在 React Router 中的另一个可选参数之前
【发布时间】:2017-11-06 12:44:41
【问题描述】:

我是 React 新手,如果我犯了错误,请原谅我 :)

我正在使用 React 路由器 dom 版本 4.2.2。

我正在我的BrowserRouter 中定义一条路径,如下所示:

<Route exact path="/my-base-url/myForm/:formMode/:templateID?/:ruleID?" component={MyFormComponent}/>

MyFormComponent.jsx 中引用为:

let formMode = this.props.match.params.formMode;    
let templateID = this.props.match.params.templateID;
let ruleID = this.props.match.params.ruleID;

我的问题是,在templateID 不存在且 ruleID 存在的情况下,是否有可能省略templateID 并仅发送ruleID? (以及如何阅读?)

我发现query-string 使这成为可能,但我想保留“路径参数”。

请注意,以下是我可能遇到的情况:

formMode     CREATE    EDIT    DELETE
---------------------------------------
templateID    yes       no       no
ruleID        no        yes      yes

提前致谢

【问题讨论】:

    标签: reactjs react-router react-router-dom


    【解决方案1】:

    试试/templateID/:templateID?/ruleID/:ruleID?这样的路径

    使用/templateID/1/ruleID/1,您将拥有{ params: { templateID:1, ruleID:1 }}

    使用/templateID/ruleID/1,您将拥有{ params: { ruleID:1 }}

    route tester

    【讨论】:

    • 谢谢!这正是我要找的东西!
    【解决方案2】:

    为什么不简单地添加第二个规则定义并将其粘贴在 &lt;Switch&gt; 中:

    <Route exact path="/my-base-url/myForm/:formMode/:ruleID?" component={MyFormComponent}/>
    

    请注意,这是假设:

    /my-base-url/myform/2 -> ruleId

    /my-base-url/myform/1/2 -> templateId, ruleId

    不能作为

    /my-base-url/myform/1 -> 带有 ruleId 的 templateId 可选。

    或者,您可以使用 render={} 属性而不是 component= 并编写您想要的内容,这样您就不必更改表单人的 API

    <Route exact path="/my-base-url/myForm/:formMode/:templateID?/:ruleID?" 
        render={({match: { params }}) => params.templateId ? 
          <MyFormComponent templateId={params.templateId} : 
          <SomethingElse />
    } />
    

    【讨论】:

    • 我有一个使用render={}的想法,但它不适合上述要求,因为我必须放置许多速记 if-else 块来检查是否可能这两个参数的组合可以存在/不存在。无论如何感谢您的回答:)
    猜你喜欢
    • 2021-06-14
    • 2014-12-09
    • 1970-01-01
    • 2012-06-23
    • 2015-08-24
    • 2022-01-21
    • 1970-01-01
    • 2010-11-14
    • 2021-10-22
    相关资源
    最近更新 更多