React.js react-router-dom@6: 单击 Link 元素会更改 url 但不会呈现组件

React.js react-router-dom@6: Clicking Link element changes the url but not renders components

你好,我目前正在努力处理 'react-router-dom' @6 Link 元素。 单击属于 Link 元素的注册文本允许浏览器 url 成为 localhost:5000 -> localhost:5000/注册 但仍然没有出现注册组件。 我不知道在哪里更正我的代码。

import Form from './components/form';
import Comments from './components/comments';
import Header from './components/header';
import Signup from './components/signup';
import { useState } from 'react';
import { render } from 'react-dom';
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
import './styles/app.scss';

function App() {
    const [ text, stateText ] = useState('');
    const [ user, stateUser ] = useState({});

    return (
        <div className="App">
            <Header />
            <BrowserRouter>
                <Routes>
                    <Route path="/comments" element={<Comments text={text} />} />
                    <Route path="/signup" element={<Signup />} />
                    <Route
                        path="/"
                        element={<Form text={text} stateText={stateText} user={user} stateUser={stateUser} />}
                    />
                </Routes>
            </BrowserRouter>
        </div>
    );
}

export default App;

下一个是header.js

import { BrowserRouter, Routes, Route, Router, Link} from 'react-router-dom';

const Header = () => {
    return (
        <div className="header_component">
            <BrowserRouter>
                <Link to="/signup">Signup</Link>
            </BrowserRouter>
        </div>
    );
};

export default Header;

最后,下面的那个是index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import Header from './components/header';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';

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

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
reportWebVitals();

Header中的链接和路由都需要在same路由器中渲染。每个应用程序只需要一个路由器来为所有 LinkRoutesRouteNavigateOutlet 组件和所有 RRD 挂钩提供路由上下文。

Header 移动到 App 中的 Router 并删除 Header 组件中的 Router

function App() {
  const [ text, stateText ] = useState('');
  const [ user, stateUser ] = useState({});

  return (
    <div className="App">
      <BrowserRouter>
        <Header />
        <Routes>
          <Route path="/comments" element={<Comments text={text} />} />
          <Route path="/signup" element={<Signup />} />
          <Route
            path="/"
            element={<Form text={text} stateText={stateText} user={user} stateUser={stateUser} />}
          />
        </Routes>
      </BrowserRouter>
    </div>
  );
}

...

const Header = () => {
  return (
    <div className="header_component">
      <Link to="/signup">Signup</Link>
    </div>
  );
};