如何在react中重定向表单App.js文件

问题描述 投票:0回答:1

成功登录后,我想重定向到 /dashboard。我无法使用 useNavigate(),因为它位于 App.js 文件中,并且不在组件内部。下面是我的代码。我尝试使用重定向和导航,但它不起作用。

import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import Login from './Login';
import Signup from './Signup';
import { useState } from 'react';
import { useNavigate, redirect, Navigate } from 'react-router-dom';
import axios from 'axios';

function App() {
  const [isAuthenticated, setIsAuthenticated] = useState(false);
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');

  // const navigate = useNavigate();

  const hanldeEmailChange = (e) => {
    setEmail(e.target.value);
  }

  const handlePasswordChange = (e) => {
    setPassword(e.target.value);
  }

  const handleLogin = async (e) => {
    e.preventDefault();

    try {
      const resp = await axios.post('http://localhost:8000/api/login', {
        email,
        password
      });
      if (resp.status === 200) {
        console.log(resp)
        const { token, refreshToken } = resp.data;
        localStorage.setItem('token', token);
        localStorage.setItem('refreshToken', refreshToken);
        setIsAuthenticated(true);
        // return navigate('/dashboard');
        redirect('/dashboard')
        // <Navigate to='/dashboard' replace />
      }
    } catch (error) {
      console.error(error);
    }
  }

  const router = createBrowserRouter([
    {
      path: '/',
      element: <Signup />
    },
    {
      path: '/login',
      element: <Login handlePasswordChange={handlePasswordChange} hanldeEmailChange={hanldeEmailChange} hanldeSubmit={handleLogin} />
    },
    {
      path: '/dashboard',
      element: '<div>Dashboard</div>'
    }
  ])
  return (
    <RouterProvider router={router} />
  );
}

export default App;

我尝试从“react-router-dom”重定向和导航,但它不起作用。

reactjs authentication redirect react-router-dom
1个回答
0
投票

我建议尝试这种方式

    import { useState } from 'react'
import {Navigate} from 'react-router-dom'
import './App.css'

function App() {
  const [login, setLogin] = useState(false)
    
    const handleClick = () => {
        setLogin(true)
    }


  return (
    <>

        { login && (
                  <Navigate to="/test" replace={true} />

        )} 
            Welcome
            <div>Welcome</div>
            <button onClick={handleClick}>
                Click
            </button>

    </>
  )
}

export default App

这是文档中反应路线的方式 reactRouteNavigation

© www.soinside.com 2019 - 2024. All rights reserved.