Как проверить, присутствует ли идентификатор в базе данных firebase в реальном времени, используя react.js

# #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.

Эта новая структура данных также гарантирует, что нет никакого вреда в написании одной и той же информации о заказе несколько раз. Результат после второй (или любой последующей) записи совпадает с результатом после первой записи, концепция, известная как идемпотентность.