reactjs 点击React中的按钮时重定向

1wnzp6jl  于 2023-03-01  发布在  React
关注(0)|答案(9)|浏览(408)

有谁能告诉我react中redirect是如何工作的?
我来自Angular背景,正在学习React。
我有一个小应用程序,我想在单击按钮时将用户重定向到profile组件。
这是一个非常基本的要求,但是没有适当的文档可用(或者我找不到)。
任何帮助都将不胜感激。
下面是我的代码:

import { BrowserRouter, Route, Switch, Redirect } from "react-router-dom";

<BrowserRouter>
    <Switch>
      <Route path="/" exact render={props => <Index {...props} />} />
      <Route path="/login-page" exact render={props => <Login {...props} />} />
      <Route path="/profile-page" exact render={props => <Profile {...props} />} />
      <Route path="/dashboard" exact render={props => <Dashboard {...props} />} />
      <Redirect to="/" />
    </Switch>
  </BrowserRouter>,
<Button color='primary' onClick={e => this.viewProfile()}>View Profile</Button>

viewProfile = function () {
          console.log("clicked");
      }
ttvkxqim

ttvkxqim1#

使用react-router-dom中的Link组件:

<Link to="/profile">View profile</Link>

还可以查看docs,它们提供了大量示例

sd2nnvve

sd2nnvve2#

您可以调用useHistory()钩子进行导航。

import { useHistory } from "react-router-dom";

const yourComponent = () => {
  const history = useHistory();
  viewProfile = function() {
    history.push("/new-url");
  };
  return (
    <Button color="primary" onClick={viewProfile}>
      View Profile
    </Button>
  );
};

如果您使用的是类组件,则可以将其 Package 为withRouter()以访问同一个history对象。

import React from "react";
import { withRouter } from "react-router";

class YourComponent extends React.Component {
  viewProfile = function() {
    const { history } = this.props;
    history.push("/new-url");
  };

  render() {
    return (
      <Button color="primary" onClick={this.viewProfile}>
        View Profile
      </Button>
    );
  }
}

export default withRouter(YourComponent);
vjrehmav

vjrehmav3#

React Router附带了一个Link组件,可以用于此目的,只需导入它,在to属性中设置目的地,然后用它 Package 您的Button即可:

import { Link } from "react-router-dom";

<Link to='/profile-page'>
   <Button color='primary' onClick={e => this.viewProfile()}>View Profile</Button>
</Link>

viewProfile = function () {
    console.log("clicked");
}

看看React路由器docs,他们有很多有用的信息!

gblwokeq

gblwokeq4#

添加这个解决了我的问题。

import { Redirect } from 'react-router'

      state = {
          redirect: false
         }

        const { redirect } = this.state;

        if (redirect) {
          return <Redirect to='/profile-page'/>;
        }

      viewProfile = function () {
          console.log("clicked");
          this.setState({ redirect: true })
      }

感谢“tarzenchugh”和“好撒玛利亚人"的回复

jjjwad0x

jjjwad0x5#

当你第一次学习一个新的框架时,命名法很重要:)
严格来说redirect
渲染<Redirect>将导航到新位置。新位置将覆盖历史堆栈中的当前位置
您需要的是 * 导航 * 到个人资料页面。有两种方法可以实现这一点
1.通过JSX Link
1.以编程方式使用history对象。

lztngnrs

lztngnrs6#

import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';

class Test extends Component{
  constructor(props){
    super(props);
    this.state ={}
  }
  
  viewProfile = () => {
    const {history} = this.props;
    history.push('profile-page');
  }
}
import React, { Component } from 'react';
import { withRouter } from 'react-router-dom';

class Test extends Component{
  constructor(props){
    super(props);
    this.state ={}
  }
  
  viewProfile = () => {
    const {history} = this.props;
    history.push('profile-page');
  }
  render(){
    return(
      <Button
        color='primary'
        onClick={() => this.viewProfile()}>
        View Profile
      />
    );
  }
}
export default withRouter(Test);
hk8txs48

hk8txs487#

使用react-router-dom中的useNavigate钩子,这是一个简单的解决方案

import { useNavigate } from "react-router-dom"

const navigate = useNavigate();

const navigateDashboard = (event) => {
    navigate("/dashboard");
};

<Button color='primary' onClick={navigateDashboard}>View Profile</Button>
cig3rfwq

cig3rfwq8#

这里你可以使用withRouter HOC来重定向。

import { withRouter } from "react-router";

class Component extends React.Component {
  viewProfile = function () {
     console.log("clicked");
     this.props.history.push('/main');
  }

  render(){
    return (
       <Button color='primary' onClick={e => this.viewProfile()}>View Profile</Button>        
    )
  }

}
export default withRouter(Component);

参考:https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md

fkaflof6

fkaflof69#

这样做:-

<Button color='primary' onClick={() => this.viewProfile()}>View Profile</Button>
viewProfile= () => {
      return (
        <Redirect
          to={{
            pathname: "/profile-page",
          }}
        />
      );
  };

相关问题