我是新来做出反应的人,正在开发一个允许用户在页面之间导航的应用程序。

我创建了一个TypeScript项目,内容如下


  App.tsx


import React from 'react';
import {BrowserRouter, Route, Switch} from 'react-router-dom';
import Login from './login';
import Welcome from "./welcome";
import About from './about';

const RedirectRoute = (props) => {
    // if (!authenticated) {

    // }
    return <Route {...props} />
}

const App: React.FC = () => {

    return (
        <BrowserRouter>
            <div>
                <Switch>
                    <RedirectRoute path="/" component={Welcome} exact/>
                    <RedirectRoute path="/login" component={Login} exact/>
                    <RedirectRoute path="/about" component={About} exact/>
                </Switch>
            </div>
        </BrowserRouter>
    );
};

export default App;



  welcome.tsx


import React from 'react';
import {Redirect} from 'react-router-dom';
import {Button} from 'antd';
import Login from './login';
import About from './about';

const Welcome: React.FC = () => {
    const redir = (page: string) => {
        console.log('Page:', page);
        if (page === 'login'){
          // <Redirect to="/login"/>
        } else if(page === 'about') {
            //<Redirect to="/about"/>
        }
    }

    return (
         <div style={{textAlign: 'center'}}>
            <div style={{display:'inline-block'}}>

                    <Button
                        key="login"
                        type="primary"
                        onClick={() => redir('login')}
                    >Login Page</Button>

                    <Button
                        key="about"
                        type="primary"
                        style={{marginTop:'20px'}}
                        onClick={() => redir('about')}
                    >Navigation Bar</Button>

            </div>
        </div>
    );
}

export default Welcome;



  关于.tsx


import React from "react";

const About: React.FC = () => {
  return <div>About Page</div>;
};

export default About;




  登录


import React from 'react';

const Login: React.FC = () => {
  return (
    <div>Login Page</div>
  );
}

export default Login;


基于App.tsx页面中的路由配置加载正常(localhost:3000 / about或localhost:3000 / login和localhost:3000 /)

但是,当我尝试单击按钮时重定向到页面时会发生问题(在我的实际情况下,登录成功后,我必须导航到欢迎页面)。

由于我感到困惑,请尽可能澄清以下问题:
1.登陆页面时,路由工作正常,当我想通过代码和URL重定向到页面时,如何管理路由应该有所体现。
2.保留此类路由的最佳方法是什么,当用户单击浏览器的后退按钮时,它将支持历史记录吗?

谢谢。

最佳答案

您可能需要历史

import { createHashHistory } from 'history'

export const history = createHashHistory({
    hashType: 'hashbang'
})


稍后导入内部文件:

import { history } from '../helpers'


将这行代码放入负责授权/身份验证的功能内(在提交之后),该行需要将用户推送到该路径。

history.push('/login')

关于javascript - 在无状态功能组件中进行React Router Redirect,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59913974/

10-11 11:37