Загрузите определенное количество из облачного магазина Firestore

# #javascript #firebase #react-native #google-cloud-firestore

Вопрос:

Я разрабатываю приложение для чата, которое хранит сообщения в облачном магазине FireStore. Моя проблема в том, что приложение загружает все сообщения при открытии комнат чата.

Я хочу, чтобы он загружал только 50 последних сообщений и позволял загружать дополнительные чаты при прокрутке списка. Я развиваюсь в React Native.

 const [message, setMessage] = useState([]);

useEffect(() => {
        const subscriber = firestore()
            .collection('message')
            .doc(props.chat.key)
            .collection('messages')
            .orderBy("msgDate", "desc")
            .onSnapshot(querySnapshot => {
                const tempMessage = [];
                querySnapshot.forEach(documentSnapshot => {
                    tempMessage.push({
                        ...documentSnapshot.data(),
                        key: documentSnapshot.id,
                    });
                });

                setMessage(tempMessage);
            });

        // Unsubscribe from events when no longer in use
        return () => subscriber();
    }, []);


<FlatList
            inverted
            data={message}
            renderItem={({ item }) => (
                <MessageItem msgItem={item} />
            )}
        />
 

Редактировать: Понял, что я мог бы использовать .Предел(50) Чтобы загрузить только 50 документов. Все еще работает над обновлением при прокрутке.

Ответ №1:

Вы хотите ограничить свои данные. Вот документация Firestore по заказу и ограничению ваших данных в firestore.

Вы можете добавить в свой запрос условие для загрузки только последних 20-30 сообщений. OrderBy также будет полезен здесь, так как вы хотите получать последние сообщения. Вы можете заказать в установленное время ваши сообщения, чтобы получать последние сообщения.

Комментарии:

1. Спасибо, что выяснили это . Ограничение(50) было ответом, который мне нужен был только для получения определенной суммы. Теперь мне просто нужно выяснить остальное. 🙂 Поднял бы вас, но, похоже, мне не хватает требуемой репутации.. :/