#reactjs #react-native #google-cloud-firestore #geospatial #geofirestore
#reactjs #react-native #google-облако-firestore #геопространственный #geofirestore
Вопрос:
Я пытаюсь использовать geofirestore https://geofirestore.com с помощью react native я уже реализовал методы добавления элементов в firestore, однако я прочитал в документации, что данные должны добавляться методами geofirestore. Должен ли я изменить все методы и использовать методы firestore? Я использую javascript, а не TypeScript, я вижу, что есть примеры с typescript, и кажется, что они обновили библиотеку, а другие примеры не работают. Как я мог бы добавить элементы в bbdd? Я использовал geofirex, и это было очень просто, но у него нет ограничений, я хочу перейти на geofirestore, чтобы иметь возможность использовать эту функцию. Спасибо!
Ответ №1:
таким образом, большинство, если не все, примеров Typescript почти идентичны тому, что вы сделали бы в JS (а также в обычной библиотеке firebase). Позвольте мне привести вам пример добавления и запроса (с ограничением) в react-native-firebase
.
import firebase from 'react-native-firebase';
const doc = {
coordinates: new firebase.firestore.GeoPoint(0, 0),
name: 'The center of the WORLD'
};
const collection = firebase.firestore().collection('todos');
collection.add(doc).then((docRef) => {
collection.limit(100).get().then((querySnapshot) => {
// 100 items in query
querySnapshot.docChanges.forEach((change) => {
console.log(change.doc);
});
});
});
Сейчас я никогда не использовал RNF, но из документов я могу сделать вывод, что это правильно, и они делают почти все то же самое, что и библиотека JS Firebase (за исключением docChanges
возврата в виде массива, а не функции, которая возвращает массив …). В любом случае, давайте посмотрим то же самое в Geofirestore с дополнительным преимуществом запроса с limit
и near
местоположением!
import firebase from 'react-native-firebase';
import { GeoFirestore } from 'geofirestore';
const doc = {
coordinates: new firebase.firestore.GeoPoint(0, 0),
name: 'The center of the WORLD'
};
const geofirestore = new GeoFirestore(firebase.firestore());
const geocollection = geofirestore.collection('todos');
geocollection.add(doc).then((docRef) => {
geocollection.limit(100).near({
center: new firebase.firestore.GeoPoint(0, 0),
radius: 10
}).get().then((querySnapshot) => {
// 100 items in query within 10 KM of coordinates 0, 0
querySnapshot.docChanges().forEach((change) => {
console.log(change.doc);
});
});
});
В любом случае, не бойтесь примеров кода Typescript, если вы просто удалите : GeoFirestore
или что-то еще, что является допустимым JS…
// This in TS
const firestore = firebase.firestore();
const geofirestore: GeoFirestore = new GeoFirestore(firestore);
// Is this in JS
const firestore = firebase.firestore();
const geofirestore = new GeoFirestore(firestore);
Наконец, я пытаюсь поддерживать это приложение для просмотра в актуальном состоянии с помощью Vanilla JS, если это помогает.
Комментарии:
1. Большое вам спасибо @MichaelSolati, я уже понимаю намного лучше. Проблема в том, что у меня уже был интерфейс, подключенный к firestore, и в документе была другая структура, теперь с g: g, l: l, d: d отличается, но все исправлено небольшой тяжелой работой… Вопрос, если я хочу изменить документ, удалить … Я также должен сделать это с помощью geofirestore или я могу с помощью методов обновления, установки, удаления firestore? набор примеров: ожидание firestore.set (
users / $ {user.uid}
, {обновление: update}, {слияние: true}) Еще раз, большое вам спасибо за эту замечательную библиотеку 🙂2. Вы могли бы обновить (в том числе удалить) документ напрямую без geofirestore, просто не забудьте добавить в сноски свои поля или объект с помощью
d.
. Однако, если вы обновляете местоположение / координаты, вы должны сделать это с помощью geofirestore.3. Спасибо, я понимаю, как это работает, и постепенно внедряю это в свой проект… Не могли бы вы показать мне, как будет выполнен тот же запрос, но с включенным событием прослушивания? Как я уже сказал, я использую react-native с firebase, но подключен к web sdk, а не к библиотеке RNFirebase. Приветствую и еще раз благодарю
4. Библиотека RNF пытается быть репликацией web sdk в формате 1-2-1. Практически каждый класс и метод ведут себя одинаково.
Ответ №2:
Это работает отлично
ожидать eventRef.update({‘d.arrUsers’: firebase.firestore.Значение поля.arrayUnion(userUid)});
Однако я не могу заставить это работать, это карта, и я хочу добавить другого пользователя, прежде чем она заработает правильно…
ожидать eventRef.set({‘d.userMap’: { [userUid]: { имя: name, возраст: age } }}, {объединить: true});
Если я использую update, он удаляет существующий и помещает новый, если я это сделаю, он удалит его из общего доступа в документе
Комментарии:
1. Если вы используете geofirestore и обновляете / настраиваете геодокумент, вы не ставите
d.
перед объектом. Ооочень….await eventRef.update({'arrUsers': firebase.firestore.FieldValue.arrayUnion(userUid)});
Иawait eventRef.set({ userMap: { [userUid]: { name: name, age: age } }}, {merge: true});