【问题标题】:React router displaying Multiple components at the same time反应路由器同时显示多个组件
【发布时间】:2020-06-18 14:51:18
【问题描述】:

我试图有多个路由,所以我可以从一个重定向到另一个,但是每次我添加另一个路由时,主应用程序会同时呈现样式和组件,我尝试过lazyLoad、Switch 和在 Route 路径中添加“精确”


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

import HomePage from './components/homePage/homePage';
 import SignInForm from './components/signInForm/signInForm';


function App() {
  return (
 <div>
  <Router>
  <Switch>
    <Route exact path="/" component={HomePage} />
    <Route exact path="/Sign-In" component={SignInForm} />
  </Switch>
   </Router>
 </div>
  );
}



export default App;

【问题讨论】:

  • 我无法重现。 codesandbox.io/s/thirsty-smoke-zx8qi?file=/src/App.js主应用同时渲染样式和组件是什么意思?
  • 我希望它只加载一个页面,即主页,但它也加载登录表单及其样式
  • 你的意思是它应该只获取当前路由组件的代码?
  • 是的,但是当我添加它同时加载它们时,我希望它们分开,当我单击例如登录按钮时,我希望它重定向我登录
  • 如果您希望您的组件被独立地捆绑和加载,您需要为代码拆分做好准备。详情请见reactjs.org/docs/code-splitting.html

标签: reactjs react-router


【解决方案1】:

在您的情况下,您应该使用其他组件顺序:

<Switch>
    <Route path="/Sign-In" component={SignInForm} />
    <Route path="/" component={HomePage} />
</Switch>

Switch 从上往下检查路线,在您的情况下,两者都是“精确的”,因此它会同时显示。

如果你保持正确的路径顺序,你甚至不需要精确。

【讨论】:

  • 两条路由不能同时是exact匹配。
  • @trixn 我想你是对的,但我在Switch 中看到了这种行为,它需要多个组件,并且像exact 一样威胁它们,我的解决方案是始终保持/ 路径总是最后的。这就是为什么我写“精确”而不是exact
  • 切换了顺序,去掉了exact,但还是不行,当我添加登录路由时,它仍然会改变主页的样式
  • @StrahinjaBabic 样式是另一回事,重要的是不要让它们在另一个之上加载。
  • @StrahinjaBabic 我认为您对如何将代码捆绑并提供给客户端存在误解。导入发生在编译时。一旦您导入任何文件,它将被捆绑到您的jscss。 React-Router 不会将您的代码拆分成块,它只会在运行时有条件地呈现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2020-05-16
  • 2019-06-20
相关资源
最近更新 更多