Nicht erfasster Laufzeitfehler: useNavigate() kann nur im Kontext einer <Router>-Komponente verwendet werden
P粉311563823
2023-09-04 22:15:23
<p>Ich habe ein neues React-Projekt erstellt. Ich bin neu in der Reaktion und versuche zu navigieren, nachdem ich auf den Text geklickt habe, erhalte jedoch diesen Fehler. </p>
<blockquote>
<pre class="brush:php;toolbar:false;">Nicht erfasste Laufzeitfehler:
×
FEHLER
useNavigate() darf nur im Kontext einer <Router>-Komponente verwendet werden.
bei Invariante (http://localhost:3000/static/js/bundle.js:1123:11)
bei useNavigateUnstable (http://localhost:3000/static/js/bundle.js:66522:102)
bei useNavigate (http://localhost:3000/static/js/bundle.js:66519:46)
bei App (http://localhost:3000/static/js/bundle.js:83:81)
bei renderWithHooks (http://localhost:3000/static/js/bundle.js:26618:22)
bei mountIndeterminateComponent (http://localhost:3000/static/js/bundle.js:29904:17)
bei beginWork (http://localhost:3000/static/js/bundle.js:31200:20)
unter HTMLUnknownElement.callCallback (http://localhost:3000/static/js/bundle.js:16210:18)
bei Object.invokeGuardedCallbackDev (http://localhost:3000/static/js/bundle.js:16254:20)
bei invokeGuardedCallback (http://localhost:3000/static/js/bundle.js:16311:35)
FEHLER
useNavigate() darf nur im Kontext einer <Router>-Komponente verwendet werden.
bei Invariante (http://localhost:3000/static/js/bundle.js:1123:11)
bei useNavigateUnstable (http://localhost:3000/static/js/bundle.js:66522:102)
bei useNavigate (http://localhost:3000/static/js/bundle.js:66519:46)
bei App (http://localhost:3000/static/js/bundle.js:83:81)
bei renderWithHooks (http://localhost:3000/static/js/bundle.js:26618:22)
bei mountIndeterminateComponent (http://localhost:3000/static/js/bundle.js:29904:17)
bei beginWork (http://localhost:3000/static/js/bundle.js:31200:20)
unter HTMLUnknownElement.callCallback (http://localhost:3000/static/js/bundle.js:16210:18)
bei Object.invokeGuardedCallbackDev (http://localhost:3000/static/js/bundle.js:16254:20)
bei invokeGuardedCallback (http://localhost:3000/static/js/bundle.js:16311:35)
FEHLER
useNavigate() darf nur im Kontext einer <Router>-Komponente verwendet werden.
bei Invariante (http://localhost:3000/static/js/bundle.js:1123:11)
bei useNavigateUnstable (http://localhost:3000/static/js/bundle.js:66522:102)
bei useNavigate (http://localhost:3000/static/js/bundle.js:66519:46)
bei App (http://localhost:3000/static/js/bundle.js:83:81)
bei renderWithHooks (http://localhost:3000/static/js/bundle.js:26618:22)
bei mountIndeterminateComponent (http://localhost:3000/static/js/bundle.js:29904:17)
bei beginWork (http://localhost:3000/static/js/bundle.js:31200:20)
bei beginWork$1 (http://localhost:3000/static/js/bundle.js:36163:18)
bei performUnitOfWork (http://localhost:3000/static/js/bundle.js:35432:16)
bei workLoopSync (http://localhost:3000/static/js/bundle.js:35355:9)</pre>
</blockquote>
<p>Ich kann keine Lösung für dieses Problem finden.</p>
<p>这些是我在文件中使用的代码.
app.js-Funktion: </p>
<pre class="brush:php;toolbar:false;">Logo importieren aus './logo.svg';
import './App.css';
LoginForm aus './components/LoginForm' importieren;
Importieren Sie SignUp aus „./signup“;
import { BrowserRouter as Router, Routes, Route, Link, useNavigate } from 'react-router-dom';
Funktion App() {
const navigation = useNavigate();
const handleSignUpClick = () => {
navigieren('/signup');
}
zurückkehren (
<Router>
<div className="Login">
<h3>
<a className="nav-link active" aria-current="Seite" href="#" onClick={handleSignUpClick}>
Melden Sie sich an
</a>
</h3>
<Routen>
<Routenpfad="/" element={<LoginForm />} />
<Route path="/signup" element={<SignUp />} />
</Routen>
</div>
</Router>
);
}
Standard-App exportieren;</pre>
<p>这是LoginForm.js的代码:</p>
<pre class="brush:php;toolbar:false;">import React, { useState } from 'react';
import { Button, Form, FormGroup, Label, Input, InputGroup } from 'reactstrap';
import { FaEye, FaEyeSlash } aus 'react-icons/fa';
Funktion LoginForm() {
const [Benutzername, setUsername] = useState('');
const [Passwort, setPassword] = useState('');
const [showPassword, setShowPassword] = useState(false);
const handleSubmit = (event) => {
//Handle-Senden
}
const toggleShowPassword = () => {
setShowPassword(!showPassword);
}
zurückkehren (
<div className="form-box">
<Form onSubmit={handleSubmit}>
<FormGroup>
<Label for="Benutzername">Benutzername</Label>
<Eingabetyp="text" name="Benutzername" id="Benutzername" value={username} onChange={e => setUsername(e.target.value)} />
</FormGroup>
<FormGroup>
<Label for="password">Password</Label>
<InputGroup>
<Eingabetyp={showPassword ? 'text': 'passwort'} name="passwort" id="Passwort" value={password} onChange={e => setPassword(e.target.value)} />
<Button onClick={toggleShowPassword}>
{Passwort anzeigen ? <FaEyeSlash /> : <FaEye />}
</Button>
</InputGroup>
</FormGroup>
<div className="text-center">
<Button>Senden</Button>
</div>
</Formular>
</div>
);
}
Standard-LoginForm exportieren;</pre>
<p>这是signup.js的代码:</p>
<pre class="brush:php;toolbar:false;">import './App.css';
Funktion SignUp() {
zurückkehren (
<div className="Login">
<h1>Bewerbung</h1>
</div>
);
}
Standard-Anmeldung exportieren;</pre></p>
useNavigate
钩子不能在路由器提供的路由上下文之外使用,例如在本例中为BrowserRouter
。您可以将BrowserRouter
提升到ReactTree中的更高位置来解决这个问题,但是有一个更简单的解决方案,只需将原始锚标记转换为RRD链接