element ui 路由切换 内存泄漏_数组反向递归找父id

要构建单页应用程序,我们必须有某种方法将URL映射到要显示的React组件。

在本文中,我们将研究如何使用React Router创建404路由和递归路径。

404路由

我们可以创建404路由以在添加的路线均不匹配时显示某些内容。

为此,我们可以使用星号作为通配符。

例如,我们可以编写以下代码:

import React from "react";import ReactDOM from "react-dom";import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";function Home() {  return

主页

;}function About() { return

关于

;}function NotFound() { return

不存在

;}function App() { return (

Home About 不存在

);}const rootElement = document.getElementById("root");ReactDOM.render(, rootElement);

在上面的代码中,我们具有以下路由的 Switch 组件:

它将匹配与其他路线不匹配的任何URL。

因此,当我们单击“不存在”链接时,将看到“不存在”。

当我们输入其他 / 或 /about 作为相对路径时,这也适用。

* 是通配符,用于匹配任何内容。

递归路由

与其他路由一样,我们可以递归定义路由,唯一的区别是,我们使用自身引用了 Route 中的组件。

例如,如果我们有一个邻居 NEIGHBORS 数组,如下所示:

const NEIGHBORS = [  { id: 0, name: "张三", neighbors: [1, 2, 3] },  { id: 1, name: "张小二", neighbors: [0, 3] },  { id: 2, name: "张大爷", neighbors: [0, 1, 3] },  { id: 3, name: "张大婶", neighbors: [1, 2] }];

其中 neighbors 数组引用其他条目的 id。

然后,我们可以定义一个 Neighbor 组件并按如下方式使用它:

import React from "react";import ReactDOM from "react-dom";import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";import { useParams, useRouteMatch, Redirect } from "react-router";const NEIGHBORS = [  { id: 0, name: "张三", neighbors: [1, 2, 3] },  { id: 1, name: "张小二", neighbors: [0, 3] },  { id: 2, name: "张大爷", neighbors: [0, 1, 3] },  { id: 3, name: "张大婶", neighbors: [1, 2] }];const find = id => {  return NEIGHBORS.find(p => p.id === id);};function Neighbor() {  const { url } = useRouteMatch();  const { id } = useParams();  const neighbor = find(+id);  return (

{neighbor.name} 的邻居

{neighbor.neighbors.map(id => ( {find(id).name} ))}      );}function App() { return ( );}const rootElement = document.getElementById("root");ReactDOM.render(, rootElement);

在上面的代码中,我们具有 find 函数,使查找邻居变得容易。

然后在 Neighbor 组件中,我们有:

const { id } = useParams();const neighbor = find(+id);

从URL获取 id,然后使用 find 函数查找与之相邻的 neighbor。

然后我们通过书写来显示邻居的邻居:

{neighbor.neighbors.map(id => ( {find(id).name} ))}

然后,我们有了一个 Switch 组件,它在 Route 中再次具有 Neighbor:

这是递归的部分,因为邻居在这里引用了自己。我们将 path 设置为 ${url}/:id,以便在单击上面的 Link 时,将看到新的邻居。

然后在App中,我们只需要常规的路由。再一次,我们有 path="/:id" 来查找邻居的 id。

总结

通过将 Route 的 path 值设置为星号,我们可以轻松定义404路由。

要定义递归路由,我们可以引用其内部的路由。它的处理方式与其他任何方式都一样。