#reactjs #firebase #react-native #google-cloud-firestore
#reactjs #firebase #реагирующий-собственный #google-облако-firestore
Вопрос:
Я использую React Native и Firebase Firestore. Ниже приведен мой код, в котором ошибка сохраняется. Он должен отображать true, поскольку документ существует внутри firestore, однако он продолжает возвращать false . Я попытался протестировать его со значением, которое я вручную создал на веб-сайте Firestore, и свойство .exists было true . Когда я создаю документ с помощью .однако set возвращает false . У кого-нибудь есть объяснение или решение относительно того, почему это может происходить? Я ссылался на другие статьи StackOverflow, но они не помогли, поскольку, похоже, это не происходит ни с кем другим. Дайте мне знать, если потребуется дополнительная информация. Заранее спасибо.
export default class GuestSession extends Component {
state = {
isLoading: true,
users: [],
code: 0
}
constructor(props) {
super(props);
let displayName = firebase.auth().currentUser.displayName
this.state.code = props.route.params.code
const docRef = firebase.firestore().collection('sessions').doc(this.state.code)
docRef.get().then((docSnapshot) => {
if(docSnapshot.exists) {
console.log("exists")
} else {
console.log("doesn't exist")
}
})
this.state.isLoading = false
}
}
Комментарии:
1. Есть ли у вас какие-либо правила безопасности, которые препятствовали бы созданию документа? Также вы уверены, что
this.state.code
это значение отличается от значения по умолчанию 0?
Ответ №1:
Я разобрался со своей проблемой. При динамическом создании документов на ходу вы хотите убедиться, что сначала вы создаете один документ, а не документ, который включает в себя коллекцию с другим документом. Например,
//dynamic document creation of 2 separate documents
firebase.firestore().collection('sessions').doc(this.state.code)
.collection('users').doc('exampleUserDocument').set({username: username})
вместо этого должно быть записано как
const sessionRef = firebase.firestore().collection('sessions')
sessionRef.doc(this.state.code).set({exampleField: value})
//properly sets session document
sessionRef.doc(this.state.code).collection('users').doc('exampleUserDocument').set({username: username})
//properly sets user document
Это позволяет правильно создать документ, при этом все значения свойств документа должны быть установлены как для документа сеанса, так и для пользовательского документа. Я чувствую, что когда вы выполняете более длинную версию, указанную первой, она пропускает правильное создание документа и установку правильных значений в коллекции сеансов, чтобы сэкономить некоторое время загрузки для системы. Это скорее гипотеза о том, что происходит, а не фактическое утверждение, но это мое предположение. Я надеюсь, что это поможет другим в будущем.