使用 react-router-dom 在 Route 中添加组件作为道具

Posted

技术标签:

【中文标题】使用 react-router-dom 在 Route 中添加组件作为道具【英文标题】:Add a component as props inside a Route with react-router-dom 【发布时间】:2021-12-27 21:47:11 【问题描述】:

有以下代码:

import  Switch, Route, BrowserRouter as Router  from 'react-router-dom';

export function MyComponent( list : MyComponentProps) 
  return (
    <Router>
      <Switch>
        <Route path=list[0].url component=<NextComponent /> />
      </Switch>
    </Router>
  );

我想在该路由上加载不同的组件。

react-router-dom 的版本是 5.2.0。

此代码不起作用,它在&lt;Route path... 下出现一条红线,说明:

Operator '<' cannot be applied to types 'number' and 'typeof Route'.ts(2365)
(alias) class Route<T extends  = , Path extends string = string>
import Route

有什么想法吗?

稍后编辑:

有一个答案指出用component=NextComponent 替换该行将消除错误消息。确实如此,但在这种情况下是否可以向该组件发送道具?

例如,component=&lt;NextComponent someProps=something /&gt; 似乎可行,但component=NextComponent 则不行

【问题讨论】:

【参考方案1】:

react-router-dom v5 中,您没有将 component 属性指定为 JSX 文字(RRDv6 语法),只需传递对组件的引用即可。

component=NextComponent 而不是component=&lt;NextComponent /&gt;

代码

export function MyComponent( list : MyComponentProps) 
  return (
    <Router>
      <Switch>
        <Route path=list[0].url component=NextComponent />
      </Switch>
    </Router>
  );

如果你需要传递额外的道具,那么你必须使用render 道具。这有效地呈现了一个匿名的 React 组件。不要忘记,您可能还需要将 route 道具传递给渲染的组件。

export function MyComponent( list : MyComponentProps) 
  return (
    <Router>
      <Switch>
        <Route
          path=list[0].url
          render=props => <NextComponent ...props something=value /> 
        />
      </Switch>
    </Router>
  );

Route render methods

【讨论】:

它的工作原理是这样的,但是否可以为该组件发送道具? component=&lt;NextComponent something=value /&gt; 之类的东西?

以上是关于使用 react-router-dom 在 Route 中添加组件作为道具的主要内容,如果未能解决你的问题,请参考以下文章

如何集成 Django 和 react-router-dom?

尝试导入错误:“useRouteMatch”未从“react-router-dom”导出

React学习:react-router-dom-主要组件

react路由

反应路由器 dom 将活动类设置为 NavLink

React-Router:为啥react中未定义useHistory? [复制]