У меня есть топор ios вызов моего mongoose / express server buy, когда я обновляю некоторую информацию из reactjs веб-клиента, код useEffect снова вызывает вызов, поэтому я могу обновлять состояния своих компонентов везде, но все еще извлекаю старые данные. можно ли улучшить этот процесс, чтобы я мог получать правильную информацию? Реализация GraphQL кажется намного быстрее, потому что возвращает правильную информацию. но мне не удалось выполнить разбиение на страницы с помощью graphQL, поэтому на данный момент я покрываю эту часть обычным Ax ios.
Сторона сервера:
function paginatedItemsResults(model) {
return async (req, res, next) => {
const page = parseInt(req.query.page);
const limit = parseInt(req.query.limit);
const startIndex = (page - 1) * limit;
const endIndex = page * limit;
const results = {};
if (endIndex < (await model.countDocuments())) {
results.next = {
page: page + 1,
limite: limit,
};
}
if (startIndex > 0) {
results.previous = {
page: page - 1,
limite: limit,
};
}
results.total = await model.countDocuments().exec();
try {
results.results = await model
.find()
.sort([["date", -1]])
.limit(limit)
.skip(startIndex)
.exec();
res.paginatedItemsResults = results;
next();
} catch (e) {
res.status(500).json({ message: e.message });
}
};
}
app.get("/itemspagination", paginatedItemsResults(Items), (req, res) => {
res.json(res.paginatedItemsResults);
});
Клиентская сторона:
useEffect(() => {
let isSubscribed = true;
const fetchProducts = async () => {
setLoading(true);
try {
const res = await axios.get(
"https://**********/itemspagination?page=" +
currentPage +
"&limit=" +
limitOfItemsByPage
);
if (isSubscribed) {
dispatchPagination(
buildItemPaginationAction({
id: "next",
value: res.data.next
? res.data.next.page
: res.data.previous.page + 1,
})
);
dispatchPagination(
buildItemPaginationAction({
id: "previous",
value: res.data.previous ? res.data.previous.page : 1,
})
);
dispatch(
buildItemPaginationAction({
id: "next",
value: res.data.next
? res.data.next.page
: res.data.previous.page + 1,
})
);
dispatch(
buildItemPaginationAction({
id: "previous",
value: res.data.previous ? res.data.previous.page : 1,
})
);
setActualItems(res.data.results);
setTotalProducts(res.data.total);
setLoading(false);
}
} catch (error) {
console.log(error);
}
};
fetchProducts();
return () => (isSubscribed = false);
}, [currentPage, dispatch, limitOfItemsByPage, newItem, updateItem]);