【发布时间】:2020-03-27 01:35:22
【问题描述】:
我有一个类父类 App 包含一个导航栏和一堆路由:
function App() {
const [showNavbar, setShowNavbar] = useState(true);
return (
<>
<MyNavBar show={showNavbar}/>
<Switch>
<Route exact path='/child' component={() => <ChildPart setter={showNavbar}/>}/>
<Route> ... //other routes
</Switch>
</>
)
}
function ChildPart(props) {
const [data, setData] = useState("");
// hide navbar
useEffect(() => {
console.log("child init"); // this got printed twice
props.setter(false);
}, [props.setter]);
// get data at first mount;
useEffect(()=>{
setData(api.loadUserInfo());
}, []);
return (<div>
Data here: {data}
</div>)
}
我想要实现的是根据用户当前所在的页面更改导航栏。
例如,使用时隐藏导航栏/child
但是通过这种方式实现,ChildPart 似乎被挂载和卸载两次,因为父级被渲染并且 rotues 也是应用程序的一部分。
这会导致子组件内部不必要的 API 调用。
有没有办法解决这个问题?
【问题讨论】:
标签: javascript reactjs react-router-dom