javascript - react 路由器 dom : Route and Router not working at all

标签 javascript reactjs react-router-dom

我对 react 很陌生,并尝试使用 react-router-dom 进行重定向我按照文档做了所有事情,但我的代码似乎不起作用。我收到有关未找到元素的错误,我不明白是什么原因造成的。另外,我现在只是尝试使用地址栏而不是任何按钮或链接访问该页面。

错误

Matched leaf route at location "/" does not have an element. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.

/register 的相同错误

index.js

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

ReactDOM.render( 
  <Router>
    <React.StrictMode>
      <Routes>
        <Route exact path="/register" component={Register} />
        <Route exact path="/" component={App} />
      </Routes>
      <App />
    </React.StrictMode>
  </Router>,
  document.getElementById('root')
);

reportWebVitals();

App.js

import { Component } from 'react';

class App extends Component {
  render(){
    return (
      <div>
        HELLO WORLD
      </div>
    );
  }
}


export default App;

Register.js

import { useState } from "react";
import { useNavigate } from "react-router-dom";

export default function Register(){
    const history = useNavigate();
    const initialFormData = Object.freeze({
          email: '',
          password: '',
      });

      const [formData, updateFormData] = useState(initialFormData);

    const handleChange = (event) => {
      updateFormData({
              ...formData,
              // Trimming any whitespace
              [event.target.name]: event.target.value.trim(),
          });
    }

    const handleSubmit = (event) => {
      event.preventDefault();
      console.log(event.target.email.value);
      console.log(event.target.password.value);
    }

    return (
      <form onSubmit={handleSubmit}>
        <div>
          <label>
            Email: 
            <input type="text" value={formData.email} name="email" onChange={handleChange} />
          </label>
        </div>
        <div>
          <label>
            Password: 
            <input type="text" value={formData.password} name="password" onChange={handleChange}/>
          </label>
        </div>
        <input type="submit" value="Submit" />
      </form>
  );
}

最佳答案

您没有正确渲染路线组件。它们应该在 element 属性上呈现为 JSX,而不是对组件的引用。这是 react-router-dom 版本 5 和 6 之间的重大变化。另请注意,Route 组件也不再采用 exact 属性,它们现在始终完全匹配。

ReactDOM.render( 
  <Router>
    <React.StrictMode>
      <Routes>
        <Route path="/register" element={<Register />} />
        <Route path="/" element={<App />} />
      </Routes>
      <App />
    </React.StrictMode>
  </Router>,
  document.getElementById('root')
);

关于javascript - react 路由器 dom : Route and Router not working at all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69893108/

相关文章:

javascript - Heroku 部署 Node.js 时出错

javascript - React Routing Menu - 数据处理最佳实践

javascript - 将记录插入数组时取消定义

javascript - JavaScript 中比较器的 bool 排序

javascript - 如何在 TypeScript 中使用嵌套对象?类型 'object' 上不存在属性

reactjs - 满足条件时,如何停止在 refetchInterval 上运行的 react 查询 useQuery?

javascript - Webpack react 热加载器不工作

javascript - 如何在reactjs中获取url参数

javascript - 如何在使用 react 路由器 v6 时使用历史实例?

javascript - 这个压缩后的 JS 与未压缩版本有何相同之处?