如何在React.js中重定向

时间:2019-11-18 11:07:38

标签: reactjs redirect

我想问你关于React.js中重定向的问题。

下面是https://github.com/supasate/connected-react-router/blob/master/examples/basic/src/components/Home.js中的Home.js的修改内容

(这不是我的私人GitHub Repo!它是开源库)

import React, { useState } from 'react'
import { Redirect } from 'react-router-dom'

const Home = () => {
  console.log('Home');


  const renderRedirect = () => {
    return <Redirect to={{
      pathname: '/counter'
    }} />
  }

  const clicked = () => {
    console.log('clicked');
    return <Redirect to={{
      pathname: '/counter'
    }} />
  }

  return (
    <div>
      Home
      {/* {renderRedirect()} */}
      <button onClick={() => clicked()}>counter</button>
    </div>
  )
}

export default Home

函数renderRedirect()现在已在标记中注释。如果我取消对此功能的注释,则此功能和重定向效果很好。

但是,当我单击标记中的按钮时,重定向将无法进行。为什么重定向无效?

感谢阅读。

3 个答案:

答案 0 :(得分:2)

以这种方式尝试:

import React, { useState } from 'react'
import { Redirect } from 'react-router-dom'

const Home = () => {
  console.log('Home');
  constructor(props){
   this.state={
    isRedirect : false;
 }
}
  const renderRedirect = () => {
  if (this.state.isRedirect) {
    return (
     <Redirect to={{
      pathname: '/counter'
     }}
    />
   );
 }
}

  const clicked = () => {
    console.log('clicked');
    this.setState({
     isRedirect :true
    })
  }

  return (
    <div>
      Home
       {renderRedirect()} 
      <button onClick={() => clicked()}>counter</button>
    </div>
  )
}

export default Home;

答案 1 :(得分:2)

react中没有重定向方案。相反,它只是重新呈现特定的组件。这就是为什么它被视为虚拟DOM。在您的方案中,该组件不会重新呈现。

答案 2 :(得分:1)

Clicked函数仅返回重定向组件。但是它没有被附加到JSX的任何地方。触发它是一部分,附加它是第二部分。注释掉renderRedirect意味着您错过了第二步。