繁体   English   中英

React-Router 4基本名称中的通配符

[英]Wildcard in React-Router 4 basename

在React-Router 4中,我像这样配置basename

<BrowserRouter basename="/aaaa/bbbb/*/cccc">

其中*可以是任何整数。 但是,这不起作用-我的语法错误吗?

您可以创建一个数组或一些可以动态创建链接和路由元素的东西:

// create the array with the ids and the components
const wildcards = [
  {id: 0, target: ComponentOne},
  {id: 1, target: ComponentTwo},
  {id: 2, target: ComponentThree}
];

// now map to create the links
{wildcards.map( e => {
  return <Link className="btn btn-secondary" to={`/aaa/bbb/${e.id}/ccc`}>Component {e.id}</Link>
})}

// then the routes
{ wildcards.map( e => {
  return <Route path={`/aaa/bbb/${e.id}/ccc`} component={e.target} key={`component_${e.id}`}></Route>
})}

这是此方法的实时示例:

https://codesandbox.io/s/vyO05x2g

此外,React Router还提供了在Route元素内使用冒号的功能。 尽管此方法将呈现相同的基本组件,但您应该在其中创建逻辑以呈现该特定路径的特定数据:

<Route path="/aaa/bbb/:id/ccc" component={MyBaseComponent}></Route>

// then in the base component
const MyBaseComponent = ({match}) => {
  // run your logic here
  return(
    <div>Your content depending on the match params</div>
  );
};

编辑

根据评论,我们不在同一页面上。 我假设您要根据代码的用途传递不同的值。 在这种情况下,您可以使用模板文字将变量,属性或状态属性传递给基本路由器: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

像这样:

<BrowserRouter basename=`/aaaa/bbbb/${wildcard}/cccc`>

那应该传递带有<BrowserRouter />的组件的每个渲染器上的wildcard

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM