到达路由器,渲染嵌套的路由组件

时间:2019-10-22 13:41:00

标签: reactjs typescript react-tsx reach-router

我正在React应用程序(带有打字稿)中使用Reach router

使用嵌套路线,我陷入了如何将嵌套组件呈现为单独的(在单独视图中)组件而不是父组件底部的子组件的情况。

代码类似于:

App.tsx
--------
<Router>
  <Customers path="/customers">
    <PDFExport path=":id" />
  </Customers>
  <Users path="/users">
    <PDFExport path=":id" />
  </Users>
</Router>

Customers.tsx
--------------
 interface IProps extends RouteComponentProps {children: any;}

const Customers: React.FC<IProps> = props => {
 const[customers,setCustomers]=React.useSate(); // somehow fetch custmers
  return (
     <>
       {customers.map(c=>(
           <Button as={Link} to={`${c.id}`} />)
       }
      // on click the url chages to i.g. `/customers/123`
      // but I do not get navigated to the PDFExport component
      // but I have to render that here as child like follow
       {props.childern}
      // in this case I will have the content of PDFExport component at the bottom of Customers component
    </>
  );
}

PDFExport.tsx
-------------
interface IProps extends RouteComponentProps {
  id?: string;
}
const PDFExport: React.FC<IProps> = props => {
  return <div>{props.id}</div>;
  // this will contain the comon form I want to use for different parents
};

我之所以使用PDFExport作为嵌套,是因为我希望将其用于不同的路由,例如: /users/:id/customers/:id

有什么方法可以将嵌套路由作为单独的组件而不是作为子组件呈现。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

const Empty = ({ children }) => {
  return children;
}

<Router>
  <Empty path="/customers">
    <Customers path="/" />
    <PDFExport path=":id" />
  </Empty>
  <Empty path="/users">
    <Users path="/" />
    <PDFExport path=":id" />
  </Empty>
</Router>

当您使用/路径定义嵌套组件时,它将用作该父级的索引组件。由于父级为空,因此将显示该索引组件。导航到:id后,您将在父级中获得该组件,该组件又为空组件。

请参阅Index Routes下的内容。