reactjs - 更改路径更改时按钮的外观
问题描述
发生开关的主应用程序如下所示
function App() {
return (
<Router>
<div className="App">
<Navbar/>
<div className="content">
<Switch>
<Route exact path="/">
<Home/>
</Route>
<Route exact path="/create">
<Create/>
</Route>
</Switch>
</div>
</div>
</Router>
)
我的导航栏组件目前看起来像这样
import { Link } from "react-router-dom"
const Navbar = () => {
const handleClick = () => {
console.log(window.location.pathname)
}
return (
<nav className="navbar">
<h1>Testing</h1>
<div className="links">
<Link to="/" onClick={handleClick}>Home</Link>
<Link to="/create"
style = {{
color: 'white',
backgroundColor: '#2d38d4',
borderRadius: '8px'
}}>Finance</Link>
</div>
</nav>
);
}
export default Navbar;
我打算用handleClick
它来制作它,以便单击的人接收样式,但是我意识到如果我这样做了,如果有人像这样直接更改了 url,它不会改变按钮的外观localhost/ -> localhost/app
,反之亦然。
在 React 中如何管理这样的选择?
受我在这里标记为正确的答案的启发,它是:
import { NavLink } from "react-router-dom"
const Navbar = () => {
const activeStyle = {
color: 'white',
backgroundColor: '#2d38d4',
borderRadius: '8px'
}
return (
<nav className="navbar">
<h1>Testing</h1>
<div className="links">
<NavLink exact to="/"
activeStyle = {activeStyle}>Home</NavLink>
<NavLink to="/create"
activeStyle = {activeStyle}>Finance</NavLink>
</div>
</nav>
);
}
export default Navbar;
解决方案
您应该使用 NavLink 组件而不是 Link 组件,因为如果您在 to 设置的同一 Route 上,NavLink 会自动向链接添加一个活动类。
import { NavLink } from "react-router-dom"
const Navbar = () => {
const handleClick = () => {
console.log(window.location.pathname)
}
return (
<nav className="navbar">
<h1>Testing</h1>
<div className="links">
<NavLink to="/" onClick={handleClick}>Home</NavLink>
<NavLink to="/create">Finance</NavLink>
</div>
</nav>
);
}
export default Navbar;
然后在你的 CSS 中(不管你在做什么)你只需要设置活动类的样式。
官方文档还提供了一些示例,说明如何像最初一样直接为您自己的活动类或链接样式设置样式。 https://reactrouter.com/web/api/NavLink
推荐阅读
- javascript - 如何根据 CF7 中的下拉选项更改文本字段的值
- django - 创建前检查空白
- python - 如何在 Python 3 中使用 REQUEST 获取 HTTPS url?
- scala - 有没有办法在Scala中匹配(switch case)lambda表达式?
- java - 如何修复“classNotFoundException”?
- c# - 如何将 GhostScript 的路径传递给 iText7 CompareTool 功能?
- mongodb - 提供用户名和密码时的 mongorestore 警告
- python - 无法使用 Python 请求登录 - 未知错误
- c# - 我怎样才能使我的代码线程安全或者它是线程安全的?
- python - 计算 dcgan 中的损失