#javascript #reactjs #firebase #google-cloud-firestore #react-hooks
# #javascript #reactjs #firebase #google-облако-firestore #реагирующие крючки
Вопрос:
Я вручную вставляю идентификатор документа в firestore, т.е. Документ автомобилей
//Example Doc
cars:{
chasisNumber :{
chasisNumber:123dfs,
carName: BMW
}
}
//Example Doc
В этом коде, если я случайно добавлю тот же номер chasis снова, он переопределяет существующие значения, которые хранятся в соответствии с существующим номером chasis
import db from "./firebase";
function ShowCars() {
const [chasis, setChasis] = useState("");
const [name, setName] = useState("");
const addCar =(e)=>{
e.preventDefault();
db.collection("cars").doc(chasis).set({
chasisNumber:chasis,
carName:name
});
}
return (
<div>
<form>
<input placeholder="chasis No" type="text" onChange={(e)=>{setChasis(e.target.value)} value={chasis}/>
<input placeholder="Car Name" type="text" onChange={(e)=>{setName(e.target.value)} value={name}/>
<button type="submit" onClick={addCar}>Add</button>
</form>
</div>
)
}
export default ShowCars;
я хочу избежать передачи одного и того же документа, и в результате на экране должно появиться сообщение в виде предупреждения
Ответ №1:
Если вы хотите проверить, существует ли документ уже, вы можете сделать:
let docRef = db.collection("cars").doc(chasis)
docRef.get().then((doc) => {
if (!doc.exists) {
docRef.set({
chasisNumber:chasis,
carName:name
});
}
});
Если вы хотите предотвратить перезапись документа, вы можете сделать это в правилах безопасности вашей базы данных на стороне сервера. Например, это позволяет создавать, но не обновлять данные:
service cloud.firestore {
match /databases/{database}/documents {
match /cars/{car} {
allow create: if true;
allow update: if false;
allow read: if true;
}
}
}
Подробнее об этом см. Документацию Firebase по написанию правил безопасности.
Ответ №2:
Если вы хотите предотвратить дублирование номера шасси, выполните следующие действия:-
- Проверьте свою базу данных (Firestore) с помощью ключа номера шасси.
Пожалуйста, проверьте код для удобства.
импортируйте firebase из ‘./../ firebase’; // вы можете назвать firebase как DB, как вы сделали eailer.
firebase.firestore().collection(‘cars’).where(‘chasisNumber’,’==’,’yourChasisNumber’).onSnapshot((snapshot ) => {пусть cars = snapshot.docs.map((doc) => ({ id: doc.id , …doc.data() })); return cars;});
- Если он возвращает некоторые данные, разорвите элемент управления в функции с помощью ключевого слова return .
- В противном случае отправьте свои данные.
Это самое простое решение, которое вы можете попробовать.