Проблема в том, что вы не возвращаете новую ссылку на объект. Вы сохраняете ссылку на последний объект состояния, изменяете свойство и сохраняете его снова.
const navigatePage = (pager) => {
const newPagination = pagination; // copy ref pointing to pagination
newPagination.current_page = pager; // mutate property on ref
setPagination(newPagination); // save ref still pointing to pagination
};
В этом случае место в памяти, которое равно pagination
, остается прежним. c. Вместо этого вы должны скопировать все pagination
свойства в новый объект.
const navigatePage = (pager) => {
const newPagination = {...pagination}; // shallow copy into new object
newPagination.current_page = pager;
setPagination(newPagination); // save new object
};
Чтобы продвинуться дальше, вы действительно должны выполнять функциональные обновления для правильной очереди обновлений , Это в том случае, если setPagination
вызывается несколько раз в течение одного цикла рендеринга.
const navigatePage = (pager) => {
setPagination(prevPagination => {
const newPagination = {...prevPagination};
newPagination.current_page = pager;
});
};
В случае обновлений в очереди с нумерацией страниц может не представлять проблемы (последняя текущая страница set выигрывает следующую битву рендеринга), но если какие-либо обновления состояния на самом деле зависят от предыдущего значения, тогда определенно используйте шаблон функционального обновления