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

react-router-dom v4上下文路由器和路由未定义

佟和平
2023-03-14

向下滚动当前代码&错误

//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import {BrowserRouter as Router, Route, Switch} from 'react-router-dom';
import createBrowserHistory from 'history/createBrowserHistory'

import App from './components/App';
import About from './components/pages/about';

const customHistory = createBrowserHistory()

ReactDOM.render((
  <Router history={customHistory}>

    <Switch>
      <Route path='/' component={App} />
      <Route path='/about' component={About}/>
    </Switch>



  </Router>
), document.getElementById('root'))

这段代码单独工作并呈现我的'app'组件

但是当我试图在我的应用程序组件中添加一个“链接”组件时,它将无法识别它。

//App.js
import React from 'react';
import Header from './Header';
import { Link } from 'react-router-dom'

class App extends React.Component {

  render() {
    return (
      <div className="App">

        <Header className="Header" header="Header" />


        <main className='main'>
            <Link to='about'>About</Link>
        </main>

      </div>
    );
  }
}

export default App;

共有1个答案

璩华辉
2023-03-14

首先,您使用一个BrowserRouter,这个创建自己的历史对象并使用这个。因此,在您的情况下,不应该将历史对象传递给它。实际上,在我查看了BrowserRouter的代码之后,它甚至应该在控制台中打印一个警告。如果我是你,我会把它命名为BrowserRouter,这样可以减少出错的可能性,并且在阅读代码时更加清晰。

然后,在v4中,路由器只能有1个子路由器。但是在交换机的情况下,它实际上只挂载匹配的路由。我不确定它是否打算像这样,试着把你的hierchy改成不同的东西,并让路由器的孩子总是挂载。下面是您的代码示例:

//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import {BrowserRouter, Route, Switch} from 'react-router-dom';

import App from './components/App';

ReactDOM.render((
  <BrowserRouter>
    <App />    
  </BrowserRouter>
), document.getElementById('root'));

然后在应用程序中构建路由逻辑,这甚至更有意义,因为应用程序可能就是应用程序,因此它应该始终存在。

//App.js
import React from 'react';
import Header from './Header';

class App extends React.Component {

  render() {

    return (
      <div className="App">
        <Header className="Header" header="Header" />
        <Switch>
          <Route exact path='/' component={Home} />
          <Route path='/about' component={About}/>
        </Switch>
      </div>
    );
  }

}
//Header.js
import React from 'react';
import {Link} from 'react-router-dom';

class Header extends React.Component {

  render() {

    return (
      <header className="header">
          <Link to='/'>Home</Link>
          <Link to='/about'>About</Link>
      </header >
    );

  }

}
 类似资料:
  • 我需要多个嵌套路由 我用的是react-router-dom的v4 我有我的 我需要组件渲染成这样 Home组件包含Page1、Page2和Page3组件共有的标题组件,但不存在于Login和About中。 我的js代码是这样读的 我希望登录组件只显示在 /login当我请求 /page1、 /page2、 /page3时,它们应该分别包含主页组件和该页面的内容。 取而代之的是呈现的登录组件,在该

  • 我想把react-route添加到我的应用程序中,我有下面的代码: 更新:已安装react-router 3.0.2并工作。

  • 路由器用于路由客户端应用程序并定义应用程序对象的URL表示。 当Web应用程序为应用程序中的重要位置提供可链接,可收藏且可共享的URL时,需要路由器。 下表列出了可用于操作BackboneJS - Router - S.No. 方法和描述 1 extend 它扩展了主干的路由器类。 2 routes 它定义了应用程序对象的URL表示。 3 initialize 它为路由器实例化创建了一个新的构造函

  • 问题内容: 我一直在思考,我对客户端和服务器之间的路由感到困惑。假设我在将请求发送回Web浏览器之前使用ReactJS进行服务器端渲染,并使用react- router作为客户端路由在页面之间切换而不刷新为SPA。 我想到的是: 路线如何解释?例如,从首页()到帖子页面()的请求 路由在服务器端还是客户端去哪里? 它如何知道如何处理? 问题答案: 注意,此答案涵盖了React Router版本0.

  • 我想到的是: 路线是如何解释的?例如,从主页()到帖子页()的请求 路由在服务器端还是客户端? 它如何知道它是如何处理的?

  • 路由器是EmberJs的核心功能,它将URL转换为一系列模板并表示应用程序的状态.Ember使用路由器将URL映射到路由处理程序。 路由器将当前URL与用于加载数据,显示模板和设置应用程序状态的其他路由进行匹配。 路由处理程序执行一些操作,例如 - 它提供了模板。 它定义了模型,模板可以访问它。 如果没有用户访问应用程序特定部分的权限,则路由器将重定向到新路由。 下表列出了Ember.js中的不同