【问题标题】:How to use Route in React?如何在 React 中使用路由?
【发布时间】:2022-01-06 14:52:55
【问题描述】:

我正在学习 Django rest 框架 + react 教程。我有个问题,输入url地址后“App Component”没有显示出来。

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import {Route, Link, Switch, BrowserRouter as Router} from "react-router-dom"
import './index.css';
import App from './App';

const routing = (
  <Router>
    <Route path="/app" component={App} />
  </Router>
);

ReactDOM.render(routing, document.getElementById('root'));

App.js

import React, { PureComponent } from 'react';

function App() {
  return ( 
    <div>
      <h1>App component</h1>
    </div>
   );
}

export default App;

【问题讨论】:

  • 试试&lt;Route path="/app" component={&lt;App /&gt;} /&gt;。请参阅Route documentation
  • 还是不行,我试着用一个元素替换了component这个词,但是还是不行。我刚刚开始使用 React,但我不太了解文档。
  • 请检查您安装的react-router-dom 的版本。您的问题是 v5 组件和语法。从项目目录运行npm list react-router react-router-dom 并报告版本号。

标签: javascript reactjs react-router react-router-dom


【解决方案1】:

我在共享代码 sn-ps 中没有看到任何明显的问题。

react-router-domv5

您分享的 sn-ps 是 v5 组件和语法。

import React from 'react';
import ReactDOM from 'react-dom';
import { Route, Link, Switch, BrowserRouter as Router } from "react-router-dom";
import './index.css';
import App from './App';

const routing = (
  <Router>
    <Route path="/app" component={App} />
  </Router>
);

ReactDOM.render(routing, document.getElementById('root'));

react-router-domv6

如果您以某种方式安装了 v6,则 Switch 组件被 Routes 组件替换,现在 Routes 组件必须包装任何Route 组件。另一个变化是 Route 组件 API,不再有 component 道具和 renderchildren 函数道具,全部替换为带有 ReactElement 或 JSX 的单个 element 道具,作为一个值。

import React from 'react';
import ReactDOM from 'react-dom';
import { Route, Link, Routes, BrowserRouter as Router } from "react-router-dom";
import './index.css';
import App from './App';

const routing = (
  <Router>
    <Routes>
      <Route path="/app" element={<App />} />
    </Routes>
  </Router>
);

ReactDOM.render(routing, document.getElementById('root'));

【讨论】:

    【解决方案2】:

    您缺少 Routes 父组件:请像这样包装它并用元素替换组件,因为它不适用于路由器 v6:

    import {Routes, Route, Link, Switch, BrowserRouter} from "react-router-dom"
    
    const routing = (
      <BrowserRouter>
        <Routes>
          <Route path="/app" element={<App />}></Route>
        </Routes>
      </BrowserRouter>
    );
    

    【讨论】:

    • 'Routes' 未定义 react/jsx-no-undef
    • 当我从 react-router-dom 导入它时它仍然不起作用
    • 导入也是如此
    • 对不起,我跳过了。但是当我导入它时它仍然不起作用
    • @kowalskijakub 我编辑了我的代码
    【解决方案3】:

    您的 routing 不是 React 组件。 试试这个。

    import React from 'react';
    import ReactDOM from 'react-dom';
    import {Route, Link, Switch, BrowserRouter as Router} from "react-router-dom"
    import './index.css';
    import App from './App';
    
    const Routing = () => (
      <Router>
        <Route path="/app" component={App} />
      </Router>
    );
    
    ReactDOM.render(<Routing />, document.getElementById('root'));
    

    您需要将 React 组件传递给 ReactDOM.render(...),并且 这是一个 React 组件

    const Routing = () => {
      return (...some jsx...)
    }
    
    # or short version
    const Routing = () => (
      .... some jsx ....
    )
    

    这不是一个 React 组件

    const Routing = (
      ...some jsx...
    )
    

    【讨论】:

    • 现在问题出在:标识符“App”已被声明。
    • 但是当我重命名 const 的名称并将其添加到渲染中时,当我得到 url localhost:3000/app 时它不起作用
    猜你喜欢
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2021-07-06
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多