reactjs - React 路由器:userHistory 推送功能未按预期工作
问题描述
我正在尝试更改浏览器 URL 并根据某些条件呈现所需的组件。但是,我可以在成功登录后更改 URL 并将用户登陆到 /home 页面,但是当我尝试在按钮单击时更改 URL 时,它会点击 /accounts URL 并再次更改为 /home。
应用程序.js
<Route exact path="/accounts" component={Accounts} />
<Route exact path="/home" component={Home} />
<Route exact path="/" component={Login} />
</Switch>
从组件 A 成功登录后,我正在执行以下代码,该代码呈现家庭组件
setInterval(() => {
history.push("/home")
}, 300);
一旦用户在 /home 中执行按钮单击,我将在下面执行一段代码以更改 url 并呈现帐户组件。
function showAccountsTransactions () {
history.replace("/accounts")
}
return (
<div className={classes.root}>
<Fab onClick={showAccountsTransactions}>
Show Account and Transactions
</Fab>
</div>
但我可以看到 onClick,网址正在更改为 /accounts 并切换回 /home。各位大侠能不能给点思路。
解决方案
看起来你有一个调度程序。
setInterval(() => {
history.push("/home")
}, 300);
/home
无论您走到哪里,上面的代码都会将 URL 重置为每 300 毫秒(0.3 秒)。
setTimeOut
并且setIntervals
永远不会用于路由。所以不要。
还有一些最佳实践是避免使用history.replace()
和使用history.push()
。更改路线的历史堆栈不是一个正确的主意。
此外,当您使用时<Switch>
,无需exact
到处使用。在不同的情况下,它们只是彼此的替代品。
推荐阅读
- algorithm - AI:如何在这个游戏中找到评估函数(极小极大算法)?
- sql - 如何使用变量作为表名 SQL 查询大型表列表?
- python - Python Unittest:在 Visual Studio Code 中未发现任何测试
- google-app-engine - 从应用引擎连接到 Kubernetes 引擎
- android - 如何扩展 android.widget 包中的像 DayPickerPagerAdapter 这样的 Android 类?
- python - 将最后 13 行 CSV 复制到新的 CSV
- iis - 在 IIS 中,如何为基本身份验证配置文件夹访问?
- android - Android中两个视图之间的滚动同步
- python-2.7 - Pandas - 如果单元格为空白,则将 pd.timedelta[ns64] 单元格转换为字符串 '--'
- beagleboneblack - 是否可以将 beaglebone(黑色)模拟引脚用作 GPIO?