代码之家  ›  专栏  ›  技术社区  ›  Max Wolfen

反应通过按钮在React with React router dom中单击重定向

  •  0
  • Max Wolfen  · 技术社区  · 7 年前

    因此,我试图了解如何通过事件单击在我的应用程序中进行正确的重定向?我把 react-router-dom 将逻辑重定向到按钮 event handler ,但它不起作用。

    我做错了什么?

    import React, { Component, Fragment } from 'react';
    import Preloader from '../Preloader/Preloader'
    import preloaderRunner from '../../Modules/PreloaderRunner'
    import { Redirect } from 'react-router-dom';
    import axios from 'axios';
    
    class LoginPage extends Component {
        constructor(props) {
            super(props);
            this.state = {
                navigate: false
            }
        }
    
        handleClick = () => {
            console.log('Button is cliked!');
            return <Redirect to="/employers" />
        }
    
        render() {
            return (
                <Fragment>
                    <Preloader/>
                    <h1>This is the Auth Page!</h1>
                    {this.state.navigate === true
                    ? <div>
                        <div>You already loggined!</div> 
                        <button onClick={this.handleClick}>Go to the Employers List!</button>
                      </div>
                    : <div>
                        <form>
                           // some code...
                        </form>
                    </div>}
                </Fragment>
            )
        }
    }
    
    export default LoginPage;
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   trixn    7 年前

    组件不会呈现单击处理程序返回的内容。您必须引入一个可以设置的新状态属性,然后呈现 <Redirect> 组件,当该属性包含重定向到的路径时:

    class LoginPage extends Component {
        constructor(props) {
            super(props);
            this.state = {
                navigate: false,
                referrer: null,
            };
        }
    
        handleClick = () => {
            console.log('Button is cliked!');
            this.setState({referrer: '/employers'});
        }
    
        render() {
            const {referrer} = this.state;
            if (referrer) return <Redirect to={referrer} />;
    
            // ...
        }
    }
    

    或者,您可以渲染 <Link> 由@alowsarwar建议的组件,单击后将为您执行重定向。

        2
  •  2
  •   mbarish-me    7 年前

    我相信点击后,您希望将用户带到“/雇主”。那么你需要使用 链接 来自react路由器com。理想情况下,在诸如' 把手舔 '应更改状态而不返回JSX(这是错误的方法)

    import React, { Component, Fragment } from 'react';
    import Preloader from '../Preloader/Preloader'
    import preloaderRunner from '../../Modules/PreloaderRunner'
    import { Redirect, Link } from 'react-router-dom';
    import axios from 'axios';
    
    class LoginPage extends Component {
        constructor(props) {
            super(props);
            this.state = {
                navigate: false
            }
        }
    
        handleClick = () => {
            this.setState({ navigate: true});
        }
    
        render() {
            return (
                <Fragment>
                    <Preloader/>
                    <h1>This is the Auth Page!</h1>
                    {this.state.navigate === true
                    ? <div>
                        <div onClick="this.handleClick">If you want to enable link on some event (Sample test case fyr)</div> 
                        {this.state.navigate ? <Link to='/employers'/> : null}
                      </div>
                    : <div>
                        <form>
                           // some code...
                        </form>
                    </div>}
                </Fragment>
            )
        }
    }
    
    export default LoginPage;