【发布时间】:2019-01-22 19:27:36
【问题描述】:
了解 React Router 我注意到当从路由 a 切换到 b 时,组件会回到其初始状态。
为什么在同一条路线(即a到a上再次点击时不会发生同样的情况?
我如何实现一种方法,让单击同一路由 <NavLink/> 组件恢复到其原始状态 - 应该/可以在 React Router 的 onChange 钩子上完成吗?
如果这是一种反模式,请告诉我我还能如何完成以下操作:我需要我的组件恢复到其原始状态,不仅在切换路由时,而且在 用户选择 再次点击同一条路线。
下面是问题的抽象:
单击 Cat <p/> 标记应将其颜色更改为 green,单击同一路线 <NavLink to="/cat-view">cat</NavLink> 应将 cat 颜色状态恢复为其初始状态。即color: false
就像从路线 a 切换到 b 时一样(在我的情况下是猫到狗)
// Cat Component
import React, { useState } from "react";
export const Cat = () => {
const [color, setColor] = useState(false);
function ChangeColor() {
setColor(true);
}
console.log(color)
return (
<p onClick={ChangeColor}>
Click on this <span className={color ? "green" : " "}>Cat</span>
</p>
);
};
import {
BrowserRouter as Router,
Route,
NavLink,
Switch,
withRouter,
browserHistory
} from "react-router-dom";
// Main Component
class PetShop extends Component {
state = {};
render() {
return (
<Router history={browserHistory}>
<div>
<ul>
<li>
<NavLink to="/">home</NavLink>
</li>
<li>
<NavLink to="/cat-view">cat</NavLink>
</li>
<li>
<NavLink to="/dog-view">dog</NavLink>
</li>
</ul>
<Switch>
<Route
path="/cat-view"
render={() => <Cat/>}
onChange={console.log("cat route changed")}
/>
<Route
path="/dog-view"
render={() => <Dog/>}
onChange={console.log("dog route changed")}
/>
</Switch>
</div>
</Router>
);
}
}
export default withRouter(PetShop);
【问题讨论】:
标签: javascript reactjs react-router react-router-v4