反应。通过按钮单击重定向在React中使用react-router-dom

时间:2018-04-11 09:48:30

标签: reactjs react-router-dom

所以,我尝试了解如何通过事件点击在我的应用中进行正确的重定向?我将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 个答案:

答案 0 :(得分:2)

点击处理程序返回的内容将不会由您的组件呈现。您必须引入一个可以设置的新状态属性,然后在该属性包含重定向到的路径时呈现<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} />;

        // ...
    }
}

或者,不是使用点击处理程序渲染自己的按钮,而是按照@alowsarwar的建议呈现<Link>组件,点击后会为您重定向。

答案 1 :(得分:1)

我相信点击你想把用户带到&#39; /雇主&#39; 。然后,您需要使用react-router-com中的链接。理想情况下,在React事件中,例如&#39; handleClick &#39;应该改变状态而不是返回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;