У меня есть 6 ссылок (дом, мир, политика, бизнес, технологии, спорт) на моей панели навигации, и я хочу, чтобы параметр «section» был одним из этих значений. Если введено другое значение «раздела», будет отображаться сообщение «страница не найдена».
Все 6 ссылок работают правильно. useEffect запускается повторно при нажатии другой ссылки на панели навигации. Однако, если я ввожу недопустимый параметр раздела, сначала отображается сообщение «страница не может быть найдена», затем я нажимаю ссылку на панели навигации, useEffect не запускается повторно, и приложение падает.
Я не могу понять почему useEffect не запускается повторно, я указал props.match.params.section как его зависимость.
const Headlines = (props) => {
useEffect(() => {
console.log(props.match.params.section);
props.getArticles(props.match.params.section === 'sports' ? 'sport' : props.match.params.section);
}, [props.match.params.section]);
if (props.match.params.section !== undefined &&
props.match.params.section !== 'world' &&
props.match.params.section !== 'politics' &&
props.match.params.section !== 'business' &&
props.match.params.section !== 'technology' &&
props.match.params.section !== 'sports') {
return (
<Container fluid>
<h1>The page cannot be found</h1>
</Container>
);
}
return (
props.news.loading ?
<Spinner/>
:
<Container fluid className={classes.headlines}>
{props.news.articles.map((article) => {
return <HeadlineItem key={article.id} article={article}/>
})}
</Container>
)
};
Код навигационной панели:
<Nav className="mr-auto">
<NavLink to="/"
exact
className={classes.link}
activeClassName={classes.selected}>Home</NavLink>
<NavLink to="/world"
className={classes.link}
activeClassName={classes.selected}>World</NavLink>
<NavLink to="/politics"
className={classes.link}
activeClassName={classes.selected}>Politics</NavLink>
<NavLink to="business"
className={classes.link}
activeClassName={classes.selected}>Business</NavLink>
<NavLink to="/technology"
className={classes.link}
activeClassName={classes.selected}>Technology</NavLink>
<NavLink to="/sports"
className={classes.link}
activeClassName={classes.selected}>Sports</NavLink>
</Nav>
Код приложения. js:
function App() {
return (
<Provider store={store}>
<Router>
<NavigationBar/>
<Switch>
<Route exact path="/:section?" component={Headlines}/>
</Switch>
</Router>
</Provider>
);
}