suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Nicht erfasster Laufzeitfehler: useNavigate() kann nur im Kontext einer <Router>-Komponente verwendet werden

<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>
P粉311563823P粉311563823448 Tage vor648

Antworte allen(1)Ich werde antworten

  • P粉301523298

    P粉3015232982023-09-05 17:32:11

    useNavigate 钩子不能在路由器提供的路由上下文之外使用,例如在本例中为 BrowserRouter。您可以BrowserRouter提升到ReactTree中的更高位置来解决这个问题,但是有一个更简单的解决方案,只需将原始锚标记转换为RRD 链接

    <Link className="nav-link active" aria-current="page" to="/signup">
      Sign up
    </Link>
    function App() {
      return (
        <Router>
          <div className="Login">
            <h3>
              <Link className="nav-link active" aria-current="page" to="/signup">
                Sign up
              </Link>
            </h3>
            <Routes>
              <Route path="/" element={<LoginForm />} />
              <Route path="/signup" element={<SignUp />} />
            </Routes>
          </div>
        </Router>
      );
    }

    Antwort
    0
  • StornierenAntwort