反应按钮onClick重定向页面

Raj*_*epe 26 javascript reactjs bootstrap-4

我正在使用React和bootstrap开发Web应用程序.当应用按钮onClick时,我花了很多时间让我的页面重定向到另一个.如果在一个href后,我不能去另一页.

那么请你告诉我是否需要使用反应导航或其他方法使用Button onClick导航页面?

import React, { Component } from 'react';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink  } from 'reactstrap';

class LoginLayout extends Component {

  render() {
    return (
 <div className="app flex-row align-items-center">
        <Container>
     ...
                    <Row>
                      <Col xs="6">                      
                        <Button color="primary" className="px-4">
                            Login
                         </Button>
                      </Col>
                      <Col xs="6" className="text-right">
                        <Button color="link" className="px-0">Forgot password?</Button>
                      </Col>
                    </Row>
               ...
        </Container>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

ara*_*ddy 50

使用React Router v4:

import { withRouter } from 'react-router-dom';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink  } from 'reactstrap';

class LoginLayout extends Component {
  constuctor() {
    this.routeChange = this.routeChange.bind(this);
  }

  routeChange() {
    let path = `newPath`;
    this.props.history.push(path);
  }

  render() {
    return (
      <div className="app flex-row align-items-center">
        <Container>
          ...
          <Row>
            <Col xs="6">                      
              <Button color="primary" className="px-4"
                onClick={this.routeChange}
                  >
                  Login
                </Button>
            </Col>
            <Col xs="6" className="text-right">
              <Button color="link" className="px-0">Forgot password?</Button>
            </Col>
          </Row>
          ...
        </Container>
      </div>
    );
  }
}

export default withRouter(LoginLayout);
Run Code Online (Sandbox Code Playgroud)

  • 使用上面的代码后,我仍然在同一页面上。除此之外我还需要做任何额外的工作吗? (2认同)

Wal*_*dan 46

不要使用按钮作为链接。相反,使用样式为按钮的链接。

<Link to="/signup" className="btn btn-primary">Sign up</Link>
Run Code Online (Sandbox Code Playgroud)

  • 但这不是问题。 (5认同)

May*_*dol 38

反应路由器 v5.1.2:

import { useHistory } from 'react-router-dom';
const App = () => {
   const history = useHistory()
   <i className="icon list arrow left"
      onClick={() => {
        history.goBack()
   }}></i>
}
Run Code Online (Sandbox Code Playgroud)

  • 由于“TypeError:无法读取未定义的属性“历史记录””,我已经在“const History = useHistory()”行上失败了。你在你的index.js中使用过react-router-dom的任何东西吗? (3认同)

小智 20

这可以非常简单地完成,您不需要为它使用不同的函数或库。

onClick={event =>  window.location.href='/your-href'}
Run Code Online (Sandbox Code Playgroud)

  • 注意:这将重新加载页面。 (11认同)

Mat*_*osa 19

我试图找到重定向的方法,但失败了。重定向 onClick 比我们想象的要简单。只需将以下基本 JavaScript 放在您的 onClick 函数中,不要乱搞:

window.location.href="pagelink"
Run Code Online (Sandbox Code Playgroud)

  • 注意:这将重新加载页面。 (8认同)
  • 是的,这违背了使用 React 制作单页面应用程序的目的,将使所有 React 代码被重新发送等等(诸如历史记录之类的东西可能会被重置) (2认同)

小智 10

首先,导入它:

import { useHistory } from 'react-router-dom';
Run Code Online (Sandbox Code Playgroud)

然后,在函数或类中:

const history = useHistory();
Run Code Online (Sandbox Code Playgroud)

最后,你把它放在onClick函数中:

<Button onClick={()=> history.push("/mypage")}>Click me!</Button>
Run Code Online (Sandbox Code Playgroud)


Kar*_*eel 7

一个非常简单的方法是通过以下方式:

onClick={this.fun.bind(this)}
Run Code Online (Sandbox Code Playgroud)

和功能:

fun() {
  this.props.history.push("/Home");
}
Run Code Online (Sandbox Code Playgroud)

finlay 你需要用路由器导入:

import { withRouter } from 'react-router-dom';
Run Code Online (Sandbox Code Playgroud)

并将其导出为:

export default withRouter (comp_name);
Run Code Online (Sandbox Code Playgroud)


Mah*_*rus 7

useHistory()fromreact-router-dom可以解决你的问题

import React from 'react';
import { useHistory } from "react-router-dom";
function NavigationDemo() {
  const history = useHistory();
  const navigateTo = () => history.push('/componentURL');//eg.history.push('/login');

  return (
   <div>
   <button onClick={navigateTo} type="button" />
   </div>
  );
}
export default NavigationDemo;
Run Code Online (Sandbox Code Playgroud)


小智 5

如果以上所有方法都失败,请使用以下方法:

    import React, { Component } from 'react';
    import { Redirect } from "react-router";
    
    export default class Reedirect extends Component {
        state = {
            redirect: false
        }
        redirectHandler = () => {
            this.setState({ redirect: true })
            this.renderRedirect();
        }
        renderRedirect = () => {
            if (this.state.redirect) {
                return <Redirect to='/' />
            }
        }
        render() {
            return (
                <>
                    <button onClick={this.redirectHandler}>click me</button>
                    {this.renderRedirect()}
                </>
            )
        }
    }
Run Code Online (Sandbox Code Playgroud)


Adi*_*aik 5

如果要重定向到 Click 事件的路由。

就这样做

在功能组件中

props.history.push('/link')
Run Code Online (Sandbox Code Playgroud)

类内组件

this.props.history.push('/link')

Run Code Online (Sandbox Code Playgroud)

例子:

<button onClick={()=>{props.history.push('/link')}} >Press</button>
Run Code Online (Sandbox Code Playgroud)

测试:

react-router-dom: 5.2.0,

反应:16.12.0


小智 5

如果您已经创建了一个类来定义按钮的属性(如果您已经创建了一个按钮类),并且您想在另一个类中调用它并通过您在这个新类中创建的按钮将其链接到另一个页面,只需导入您的“按钮”(或按钮类的名称)并使用以下代码:

import React , {useState} from 'react';
import {Button} from '../Button';

function Iworkforbutton() {
const [button] = useState(true);

return (
    <div className='button-class'>
        {button && <Button onClick={()=> window.location.href='/yourPath'}
            I am Button </Button>
    </div>
    )
}

export default Iworkforbutton
Run Code Online (Sandbox Code Playgroud)