簡體   English   中英

如何將 redux 集成到 firebase firestore 中?

[英]How to integrate redux into firebase firestore?

我能夠從 firebase firestore 獲取 categoryMap 中的數據,但我想將數據保存在 state 中,然后使用 redux 工具包在組件之間共享 state。 我應該在下面的代碼中創建動作創建者,還是應該使用 React 的 useState 鈎子,然后在其上應用 redux?

這是我從 firestore 獲得的數據的代碼片段:

export const getCategoriesAndDocuments = async () => {
  const collectionRef = collection(db, 'categories');
  const q = query(collectionRef);
  const querySnapshot = await getDocs(q);
  const categoryMap = querySnapshot.docs.reduce((acc, docSnapshot) => {
    const { title, items } = docSnapshot.data();

    acc[title.toLowerCase()] = items;
    return acc;
  }, {});
};

您可以直接將數據存儲在您的 redux 存儲中。 由於 redux store 是A store 保存應用程序的整個狀態樹,因此您不需要添加額外的狀態。

我知道這是一個老問題,但如果有人最終來到這里尋找答案:

除了 Tolunay Özdemir 的建議之外,您還可以使用RTK 查詢從 Firestore 獲取數據。 通過這種方式,您可以受益於它的緩存功能並使用...查詢,如果您想使用它們,請使用...Mutation 掛鈎。

您可以執行類似以下操作,使用fakeBaseQuery()作為baseQueryqueryFn而不是常規query

import { createApi, fakeBaseQuery } from '@reduxjs/toolkit/query/react';
import { collection, doc, getDocs } from 'firebase/firestore';
import { db } from '../../firebase';

export const getCategoriesAndDocuments = async () => {
  const collectionRef = collection(db, 'categories');
  const q = query(collectionRef);
  const querySnapshot = await getDocs(q);
  const categoryMap = querySnapshot.docs.reduce((acc, docSnapshot) => {
    const { title, items } = docSnapshot.data();
    acc[title.toLowerCase()] = items;
    return acc;
  }, {});
  return categoryMap;
};

export const api = createApi({
  baseQuery: fakeBaseQuery(),
  endpoints: (builder) => ({
    fetchData: builder.query({
      async queryFn() {
        try {
          const data = await getCategoriesAndDocuments();
          return { data };
        } catch (error) {
          console.error(error.message);
          return { error: error.message };
        }
      },
    }),
  }),
});

export const { useFetchDataQuery } = api;

如果您想了解更多詳細信息,我寫了一篇博客文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM