У меня есть компонент с именем ListItem, который имеет 7 полей (компонентов), игнорирует диаграмму, у него всего 4, все они реагируют на выбор компонента, а также имеют значок сохранения и удаления для каждого ListItem. Я использую контекст, где я установил lists=[] , в useEffect я установил списки в массив объектов, которые я получил от API. У меня есть списки компонентов, которые отображают этот компонент ListItem с помощью функции карты. Теперь я хочу добавить еще один список перед первым ListItem , я могу это сделать, и в базе данных создается запись. Я реализовал нумерацию страниц, и при нумерации страниц я добавляю все элементы списка, которые у меня есть в состоянии, вместе с элементами, которые возвращаются из API, поскольку продукт, который я добавляю, был вставлен в базу данных, поэтому при вызове API для последней страницы я также получаю данные, которые я добавил вверху, поэтому я вижу одни и те же данные дважды. 1) Когда я нажал «Добавить продукт» 2) Как последний элемент списка с момента добавления записи в базу данных. Каков будет правильный подход к таким сценариям. Пожалуйста, игнорируйте, если я не могу понять, потому что это мой первый вопрос.
Как отобразить и добавить похожий элемент в список элементов из API в React.js?
Ответы (1)
Трудно дать конкретный совет, не видя вашего кода, но я думаю, что понимаю проблему. Вам нужно хранить элементы, которые вы добавляете, отдельно от тех, которые вы извлекаете из базы данных. Вам также необходимо отделять любое состояние пользовательского интерфейса от данных.
С точки зрения пользовательского опыта, я думаю, хорошо показывать элемент, который они только что добавили, вверху, даже если он на самом деле не принадлежит этой странице. Я бы стилизовал его по-другому (возможно, с более темным цветом фона), чтобы указать, что это добавленный элемент, а не настоящий элемент списка.
Когда они переходят на другую страницу списка, добавленный элемент больше не должен добавляться в начале. Они увидят добавленный элемент только в его фактическом положении в списке, который может быть или не быть на этой странице.
Вот некоторый псевдокод того, как я бы справился с этим.
const List = () => {
// store the current page (or possibly store it in the context)
const [page, setPage] = useState(1);
// some hook which accesses API data via context
// should refresh the API fetch when the page changes
const items = useListPage(page);
// store items which were added while on this page
const [addedItems, setAddedItems] = useState([]);
// clear added items on page change
useEffect(() => {
setAddedItems([]);
}, [page]);
return (
<div>
<AddForm
// AddForm component would handle the POST request
// if successful, add that item to the List state via onSuccess callback
onSuccess={(object) => setAddedItems([object, ...addedItems])}
/>
{addedItems.map((item) => (
<ListItem
{...item}
key={item.id}
temporary={true} // some sort of flag to control styling
/>
))}
{items.map((item) => (
<ListItem
{...item}
key={item.id}
temporary={false}
/>
))}
<Pagination
page={page}
setPage={page}
/>
</div>
);
};
