首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用RTK-Query in react删除或添加防火墙中的数据

无法使用RTK-Query in react删除或添加防火墙中的数据
EN

Stack Overflow用户
提问于 2022-05-26 21:47:08
回答 1查看 196关注 0票数 0

我试图实现删除和添加功能,在反应使用RTK-查询与防火墙。我正在使用RTK查询执行React中的防火墙操作,这听起来可能很奇怪。因此,我已经编写了服务API文件来删除和添加使用防火墙的操作。因此,每当我尝试使用RTK查询删除或添加防火墙中的数据时,我的控制台中就会出现一些奇怪的错误。但是,当我刷新应用程序时,在执行add/delete操作之后,我将看到我的应用程序上的更新数据。由于某些原因,最初它没有提供正确的结果,因为下面的错误,但在页面刷新后,我得到更新的值从我的反应应用程序的消防局。

以下是服务API的代码

代码语言:javascript
复制
import { createApi, fakeBaseQuery } from "@reduxjs/toolkit/query/react";
import {
  addDoc,
  collection,
  deleteDoc,
  doc,
  getDocs,
  onSnapshot,
  serverTimestamp,
} from "firebase/firestore";
import { db } from "../firebase";

export const contactsApi = createApi({
  reducerPath: "api",
  baseQuery: fakeBaseQuery(),
  tagTypes: ["Contact"],
  endpoints: (builder) => ({
    contacts: builder.query({
      async queryFn() {
        try {
          const userRef = collection(db, "users");
          const querySnapshot = await getDocs(userRef);
          let usersData = [];
          querySnapshot?.forEach((doc) => {
            usersData.push({
              id: doc.id,
              ...doc.data(),
            });
          });
          return { data: usersData };
        } catch (err) {
          console.log("err", err);
          return { error: err };
        }
      },
      providesTags: ["Contact"],
    }),
    addContact: builder.mutation({ 
      async queryFn(contact) {
        try {
          await addDoc(collection(db, "users"), {
            ...contact,
            timestamp: serverTimestamp(),
          });
        } catch (err) {
          return { error: err ? err : null };
        }
      },
      invalidatesTags: ["Contact"],
    }),
    deleteContact: builder.mutation({
      async queryFn(id) {
        try {
          await deleteDoc(doc(db, "users", id));
        } catch (err) {
          if (err) {
            return { error: err };
          }
        }
      },
      invalidatesTags: ["Contact"],
    }),
  }),
});

export const {
  useContactsQuery,
  useAddContactMutation,
  useDeleteContactMutation,
} = contactsApi;

store.js文件

代码语言:javascript
复制
import { configureStore } from "@reduxjs/toolkit";
import { contactsApi } from "./services/contactsApi";
import { setupListeners } from "@reduxjs/toolkit/query";

export const store = configureStore({
  reducer: {
    [contactsApi.reducerPath]: contactsApi.reducer,
  },
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: false,
    }).concat(contactsApi.middleware),
});

setupListeners(store.dispatch);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 04:59:23

queryFn必须始终使用返回带有data属性或error属性的对象--在您的示例中,只在错误情况下这样做。

如果您没有更好的想法,请尝试添加一个return { data: 'ok' }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72398362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档