当前位置: 首页 > 知识库问答 >
问题:

React路由器交换机未呈现特定组件

尉迟清野
2023-03-14

我有一个React应用程序,目前正在使用react-router@4.2.0,当URL更改时,我正在努力渲染特定的组件。

当我尝试访问/locations/new时,CityList组件返回一个PropTypes错误。我已经尝试在LocationsWrapper中的Route组件中添加exact,然后再添加Main config,但是,这会影响其他路由,例如/locations,使其变为空。

//浏览器路由器

import React from "react";
import { render } from "react-dom";
import { BrowserRouter } from "react-router-dom";
import { Provider } from "react-redux";

import store from "./store";
import Navbar from "./components/Core/Navbar";
import Routes from "./config/routes";

render(
  <Provider store={store}>
    <BrowserRouter>
      <div style={{ backgroundColor: "#FCFCFC" }}>
        <Navbar />
        <Routes />
      </div>
    </BrowserRouter>
  </Provider>,
  document.getElementById("root")
);

//路由器配置-(路由)

import React from "react";
import { Route, Switch } from "react-router-dom";

import Home from "../components/Home";
import Locations from "../components/Locations";
import CityList from "../components/CityList";
import CreateLocation from "../components/CreateLocation";
import Locale from "../components/Locale/index";
import Profile from "../components/Profile";
import NoMatch from "../components/Core/NoMatch";

import requireAuth from "../components/Core/HOC/Auth";

const LocationsWrapper = () => (
  <div>
    <Route exact path="/locations" component={Locations} />
    <Route path="/locations/new" component={CreateLocation} />
    <Route path="/locations/:id" component={CityList} />
  </div>
);

const Main = () => (
  <main>
    <Switch>
      <Route exact path="/" component={requireAuth(Home)} />
      <Route path="/locations" component={LocationsWrapper} />
      <Route path="/locale/:id" component={Locale} />
      <Route path="/profile" component={requireAuth(Profile, true)} />
      <Route component={NoMatch} />
    </Switch>
  </main>
);

export default Main;

我最好避免


共有2个答案

卜飞鸣
2023-03-14

非常确定您的路由不起作用,因为您还将参数与 /locations/new匹配 /locations/: id,因此new成为Id参数。

试着改变这个

   <Route path="/locations/new" component={CreateLocation} />

像这样的事情

   <Route path="/locs/new" component={CreateLocation} />

只是一个建议,希望这能有所帮助

沙靖琪
2023-03-14

是的,这个肯定会先退货

<Route path="/locations/:id" component={CityList} />

在反应路由器4没有索引路由的概念,它会检查每一个路由,所以在你的定义路由是相同的

<Route path="/locations/new" component={CreateLocation} />
<Route path="/locations/:id" component={CityList} />

两个路径都是相同的'/location/new''/location/:id'so/new和/:id是相同的参数。

所以“城市列表”最终会回来

你可以这样定义

<Route path="/locations/create/new" component={CreateLocation} />
<Route path="/locations/list/:id" component={CityList} />
 类似资料:
  • 我最近在我的路由中实现了反应路由器开关组件,以便呈现一个NoMatch组件(这只是一个404错误组件)。然而,在我的路由中实现这一点后,我注意到在我的主页上只有一个组件会呈现,标题组件。 标题和搜索栏都应该呈现到相同的路径。 我的代码如下: 我注意到如果我删除了Switch组件,那么一切都会渲染得很好,但是NoMatch组件也会渲染到路由。 问题:为什么我不能在交换机内部的同一路径上渲染多个组件?

  • react&React-Router的新功能。我正在使用react-router-4 我有以下组件-login-home-header-sidebar-content 登录组件没有标题或侧栏。 这就是我的路由 应用程序JS 然后在我的Home组件中,我有侧边栏和内容。 home.js呈现方法 侧边栏组件有一个链接,该链接具有“to”值“/home/dashboard”。 不幸的是,这并不奏效。单击

  • 我意识到以前有人问过我这个问题,请容忍我,因为我还在学习这个问题。我想我已经尝试了所有的解决方案,但是没有运气。 问题是:当重定向到时,它没有呈现预期的组件() 我已经实现了一个,如下所示; privaterout.js 这就是我使用它的地方; index.js 在这个问题中要补充几点: 我确认重定向确实发生在(我通过将

  • 问题内容: 我正在尝试在我的组件之一中进行嵌套路由。 这是父组件: 这是子组件: 可以很好地呈现路线,但呈现完全空白的页面。知道为什么会这样吗? 问题答案: 发生此现象的原因是在父路由上提到了一个属性 因此,发生的事情是react-router看到了一条匹配的路径,然后尝试从顶层开始进行匹配。它看到两条路线,一条是,另一条是。它们都不符合所需的路径,因此您会看到空白页 你需要写 因此,当您执行此操

  • 我正在用react native构建一个应用程序。我正在尝试使用switchNavigator在导航中动态设置初始路由名称。这是我的密码: 航行js 授权加载。js 应用程序。js -- 路由AuthLoding的组件必须是React组件。 我做错了什么?

  • 在标记为副本之前,请仔细阅读此内容,我向您保证,我已经阅读并尝试了每个人在stackoverflow和github上提出的关于此问题的所有建议。 我在我的应用程序中有一条路线,如下所示; route rendering呈现打开用户角色的组件,并基于该角色惰性加载正确的Routes组件,Routes组件呈现主页的开关。简化后,如下所示。 然后是路由组件 因此,问题是每当用户从/导航到/秒等...应用