为什么新的react-router-dom <redirect>不会在setTimout内部触发?

时间:2018-04-10 13:03:46

标签: javascript reactjs react-router-v4 react-router-dom react-dom

所以,我试图在注销页面和重定向到主网页之间稍微延迟一下。但是我遇到了这个问题,当我们把它放在<Redirect/>的{​​{1}}内时, react-router-dom setTimeout()方法不需要火。< / p>

因此,如果我们从计时器中解开它,setInterval()将正常工作。

问题是什么,有什么建议吗?

我的代码:

<Redirect/>

2 个答案:

答案 0 :(得分:5)

您希望USE db_name; ALTER TABLE table_name ENGINE=MYISAM; 方法返回render(),以便进行重定向。目前<Redirect />函数返回setTimeout,但这不会影响<Redirect />本身的结果。

相反,render()应该只是render()&gt;如果return <Redirect /this.state.navigate,则您将true方法延迟2秒。

这是一种纠正的,声明性的方式:

setState({ navigate: true })

对于命令式版本,请参阅@Shubham Khatri的回答。

答案 1 :(得分:0)

需要呈现

Redirect才能使其正常工作,如果要从api调用重定向,可以使用history.push以编程方式导航。您也宁愿使用setState回调而不是超时

componentDidMount(e) {
    axios.get('http://localhost:3016/logout')
    .then(
        this.setState({
            navigate: true
        }, () => {
            this.props.history.push("/employers");
        }),
    )
    .catch(err => {
        console.error(err);
    });
};

查看Programmatically Navigate using react-router了解详情

即使你在渲染中的setTimeout中添加Redirect也不会有效,因为它不会渲染它,而只是在setTimeout中返回的一部分