У меня есть страница со списком продуктов, которые я собираюсь отображать на сервере. Итак, используя Next Js s getInitialProps , я получаю список продуктов и передаю его компонентам, и он работает.
Существует требование, когда город меняется (из раскрывающегося списка ) на стороне клиента мне нужно повторно получить обновленный список продуктов из API. Следовательно, у меня есть этот вызов API в useEffect . Это в некотором роде идея.
ProductsWrapper.getInitialProps = async () => {
// This runs on Server Side
// fetch list of Products
const products = await getProducts();
// update the redux store with products returned from server by dispatching
return { products };
}
// Products is a redux connected component that listens for Product and City state updates
function Products({ products, city }) {
// fetch new Products iff city changes
useEffect( async () => {
// This runs only on Browser
const products = await getProducts();
// update the redux store with products returned from server
}, [city])
}
Проблема находится на шаге 3 ниже,
- На сервере выполняется вызов API продуктов и передается в Redux.
- Страница создается на стороне сервера и отправляется клиенту.
- На клиенте запускается useEffect и снова без надобности вызывает конечную точку API.
Как предотвратить этот избыточный вызов при первом отображении страницы на клиенте?
Ну, просто если проверьте внутри useEffect, присутствуют ли данные перед вызовом api, не работает, потому что, несмотря на то, что данные о продуктах присутствуют в магазине Redux, если город изменится, вызов api должен быть выполнен.