当前位置: 首页 > 面试题库 >

为什么我的组件在所有路径中都保持渲染?

徐文彬
2023-03-14
问题内容

输入不存在的URL时,我尝试呈现组件。但是,该组件会在所有路径中保持渲染。我正在使用react-router-dom@4.1.1。这是我设置的路线:

import * as React from "react";
import { Route, RouteComponentProps } from "react-router-dom";
import glamorous from "glamorous";
import ElementList from "./elementlist";
import AddElement from "./addelement";
import NotFound from "./NotFound";

const Styling = glamorous.div({
  minHeight: 5,
  minWidth: 8
});

const NavRouter = () => (
  <Styling>
    <Route path="/" exact={true} component={ElementList} />
    <Route path="/addelement" component={(props: 
       RouteComponentProps<{}>) => (
         <AddElement onSubmitSuccess={() => props.history.push("/")} />
       )} />
    <Route path="*" exact={true} component={NotFound}/>
  </Styling>
);

export default NavRouter;

这是我的NotFound组件:

import * as React from "react";


const NotFound = () => (
  <h1>The page that you are looking is not there.</h1>
);

export default NotFound;

我当前面临的问题是消息:更改URL时The page that you are looking is not there.,在//addelement路由上不断弹出。我很难使消息仅在未定义的路线上显示。最初,我尝试切换路线,并在顶部创建更“详细”的路线,如下所示:

const NavRouter = () => (
  <Styling>
    <Route path="/addelement" component={(props: 
       RouteComponentProps<{}>) => (
         <AddElement onSubmitSuccess={() => props.history.push("/")} />
       )} />
    <Route path="/" exact={true} component={ElementList} />
    <Route path="*" component={NotFound}/>
  </Styling>
);

但是,它没有解决问题。有没有一种方法可以防止消息出现在我去的每条路由上(未定义的路由除外)?


问题答案:

您应该使用<Switch>组件。根据文档:

这与仅使用一堆<Route>s有何不同?

<Switch>独特之处在于它 专门 绘制一条路线。相反,每个<Route>与位置匹配的结果都 包含在内 。考虑以下代码:

<Route path="/about" component={About}/>
<Route path="/:user" component={User}/>
<Route component={NoMatch}/>

如果URL是/about,则<About><User><NoMatch>将全部呈现,因为它们都与路径匹配。这是设计使然,允许我们以<Route>多种方式将s
组合到我们的应用程序中,例如侧边栏和面包屑,引导程序标签等。

但是,有时我们只想选择一个<Route>进行渲染。如果我们在,/about我们也不想匹配/:user(或显示“ 404”页面)。

因此,从导入react-router-dom

import { Route, RouteComponentProps, Switch } from 'react-router-dom';

然后像这样应用它(请注意,不需要path="*"):

<Switch>
  <Route path="/" exact={true} component={ElementList} />
  <Route path="/addelement" component={(props: 
     RouteComponentProps<{}>) => (
       <AddElement onSubmitSuccess={() => props.history.push("/")} />
     )} />
  <Route component={NotFound}/>
</Switch>


 类似资料:
  • 我正试图按照本教程学习pygame。我正试图繁殖敌人的物体,但我认为我犯了一个错误,因为没有显示任何东西。 据我所知,我必须创建一个敌人类,然后添加一个事件来添加敌人(ADDENEMY)。当该事件被调用时(由于计时器的作用,每250毫秒一次),它应该会显示一个向左移动的敌人,直到它到达显示的末尾。 我有一组敌人精灵和一组所有精灵,我使用screen.blit和for循环将所有精灵中的每个实体渲染到

  • 问题内容: 我的React组件有问题。我组件的嵌套子代似乎没有渲染。这是我的代码: 我在此文件的顶部有以下两行: 这是我的组件: 我努力了: 以完整的HTML标记调用组件(打开和关闭) 将组件嵌套在组件中(在index.jsx文件中) 我知道嵌套组件是可能的。我已经看到了。由于某种原因,它对我不起作用。 问题答案: 要允许组件包含子项并正确渲染它们,必须使用。这是传递到所有组件与孩子为道具,包含组

  • 我最近一直在研究所有成对最短路径算法,比如Floyd Warshall和Johnson的算法,我注意到这些算法即使在图包含负权重边(但不是负权重圈)时也能产生正确的解。相比之下,Dijkstra的算法(单源最短路径)不适用于负权重边。是什么让全对最短路径算法在负权重下工作?

  • 我想要进入的文件夹名为python,在我的桌面上。 当我试图找到它时,我得到了以下错误

  • 我有一个组件,我设置了一个计数,让状态更新时,按钮点击。但是当我检查渲染时间时,每次我点击按钮它都会渲染两次。 https://codesandbox.io/s/brave-forest-yre6y?file=/src/App.js 我想知道: 为什么它是这样工作的

  • 我正在使用Spring、JPA和Hibernate。这是一个玩具示例,我正在使用它来调试一个更大的与JPA相关的问题。但是,这个试图持久化一个非常基本的实体的简单示例似乎创建了分离的对象。据我所知,在对象上调用应该将实体设置为由持久性上下文管理。但是,它不是,而且对此也不起作用。输出如下:: 为简洁起见省略了进口。 :: ::