使用 React Router <Redirect /> 不会重定向到任何地方,但是为啥呢?

Posted

技术标签:

【中文标题】使用 React Router <Redirect /> 不会重定向到任何地方,但是为啥呢?【英文标题】:Using React Router the <Redirect /> Does not redirect anywhere, but why?使用 React Router <Redirect /> 不会重定向到任何地方,但是为什么呢? 【发布时间】:2021-01-29 21:57:57 【问题描述】:

在 .then() 内部完成注册后,我一直在尝试将用户重定向回“/”或“/home”,但除了重定向之外,promise 中的所有内容都会执行。我只是用 if(true) 来测试它,它确实到了那一点,因为我可以让 console.log 在那里显示文本,但只是 Redirect 是没有结果的..

const createUserWithEmailAndPasswordHandler =(event) => event.preventDefault();

    auth.createUserWithEmailAndPassword(signUp.email, signUp.pw1).then((authData) =>
        console.log("authData" + authData);
        addUserDataToDb(
            email: signUp.email,
            username: signUp.username,
        );
        if (true) 
            return <Redirect to='/home' />;
        
    )
        .catch((error) => 
            setSignUp(
                ...signUp,
                error: error,
            );
            console.error(error);
        );

    setSignUp(INITIAL_STATE);


【问题讨论】:

【参考方案1】:

Redirect 需要渲染才能工作!您可以尝试改用history.push

【讨论】:

天哪!你帮了我!谢谢!我真的花了很长时间试图弄清楚为什么它没有渲染!对于将来遇到相同问题的其他人,请使用: import useHistory from "react-router-dom";让历史 = useHistory(); const handleRedirect = () => history.push("/") 然后在需要时调用它!谢谢!【参考方案2】:

你实际做的是返回一个反应组件。如果我没记错的话,你想要实现的是向他发送“/home”,在这种情况下,你将需要使用 Router 组件通过 props 向你的组件提供的历史对象,如果它是Router 组件的直接子组件,如果它不是 Router 组件的直接子组件,则如果您使用的是函数组件,则必须使用钩子;如果您使用的是 Class 组件,则必须使用 HOC。 函数组件示例。

import  useHistory  from "react-router-dom";

function HomeButton() 
  let history = useHistory();

  function handleClick() 
    history.push("/home");
  

  return (
    <button type="button" onClick=handleClick>
      Go home
    </button>
  );



Example for Class component.

  import  withRouter  from "react-router";
  class MyComponent extends React.Component 
onClickHandler()
this.props.history.push('/home')

   render() 
     return <button onClick=onClickHandler>Hello</button>;
   

export default withRouter(MyComponent)

【讨论】:

以上是关于使用 React Router <Redirect /> 不会重定向到任何地方,但是为啥呢?的主要内容,如果未能解决你的问题,请参考以下文章

Storybook w/ react-router - 你不应该在 <Router> 之外使用 <Link>

react-router简单使用方法

react之react-router v6

ReactJS + React Router:如何从 React-Router 的 <Link> 禁用链接?

react-router Router.HistoryLocation 使用 <noscript> 离开目标,但没有完美工作

React-Router 介绍及使用