У меня есть класс родительского класса 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, кажется, получил монтирование и размонтирование дважды, так как родительский элемент рендерится, а наборы также являются частью приложения.
Это вызывает ненужные вызовы API внутри дочернего компонента.
Есть ли способ решить эту проблему?