# #javascript #reactjs #firebase-realtime-database #react-hooks
Вопрос:
Я работаю над проектом инвентаризации с использованием React. Прежде чем отправлять данные в файл progress.json, я хочу проверить, присутствуют ли эти данные уже в файле progress.json, чтобы предотвратить дублирование с использованием идентификатора, предоставленного каждому набору данных. Поскольку я все еще изучаю React, у меня нет решений для этой проблемы.
export async function progressOrders (found){ const loadedOrders = await fetchOrders('progress'); let result; //for(const key in loadedOrders){ // result = loadedOrders.filter(() =gt; { // return loadedOrders[key].id === found.id // }); //}; loadedOrders.map(() =gt; { for(const key in loadedOrders){ if(loadedOrders[key].id === found.id){ return result = true; }else{ return result = false; } } return result; }); console.log(result); if(result === true){ alert('Order already in progress state'); }else{ const response = await fetch(`${FIREBASE_DOMAIN}/progressOrders.json`,{ method:"POST", headers:{ "Content-Type": "application/json" }, body: JSON.stringify({ id: found.id, dryFruit: found.dryFruit, weight: found.weight, canteenName: found.canteenName, orderQuantity: found.orderQuantity, newOrderTime: found.newOrderTime }) }); if(!response){ throw Error('Order not in progress'); }else{ alert('Order is in progress now.'); }; } };
Комментарии:
1. Возможно, вам нужно запросить базу данных с помощью запроса GET, чтобы проверить, присутствует ли этот идентификатор уже. Или, чтобы избежать такого дорогостоящего процесса, получите все идентификаторы при загрузке приложения, сохраните их в каком-нибудь списке, а затем проверяйте каждый раз, когда вы добавляете новую запись. Обновите список после успешного добавления в базу данных.
Ответ №1:
Если вы хотите предотвратить дублирование, всегда используйте то, что должно быть уникальным, в качестве ключа для этих данных в базе данных.
Где вы сейчас храните:
progressOrders: { "somemeaninglesspushid": { ... "id": "orderIdThatMustBeUnique" } }
Подумайте о том, чтобы изменить это на:
progressOrders: { "orderIdThatMustBeUnique": { ... } }
При такой структуре данных идентификатор заказа по определению будет уникальным внутри progressOrders
, так как ключи по определению уникальны для объекта JSON.
Эта новая структура данных также гарантирует, что нет никакого вреда в написании одной и той же информации о заказе несколько раз. Результат после второй (или любой последующей) записи совпадает с результатом после первой записи, концепция, известная как идемпотентность.