首页 > 解决方案 > 错误:从 Firestore 集合中删除项目后添加了冗余字段

问题描述

您要请求功能还是报告错误
漏洞

当前的行为是什么? 加载页面时,我得到如下所示的预期数据:

截图 (43)_LI

但是,删除项目后,todayFeed会嵌入冗余。对于每个删除的项目,todayFeed都会再次添加字段(此字段不是在 firestore cllection 中创建的,并且仅在刷新页面之前存在于 redux 存储中)。更新商店后,实际项目数组的长度是相同的,看起来不像删除了一个项目(即使从firestore集合中删除了一个项目,刷新页面数据后看起来像第一个屏幕截图但正如预期的那样,数组中少了一项)

截图 (44)_LI

用户调度一个动作(redux)来删除firestore集合中的一个项目

this.props.deleteItem(item);

之后,我redux-thunk在中间件中使用额外的参数(getFirebasegetFirestore)来访问 firebase 和 firestore in action creator。

let store = createStore(reducer,
  compose(
    applyMiddleware(thunk.withExtraArgument({ getFirebase, getFirestore })),
    reduxFirestore(firebaseConfig),
    reactReduxFirebase(firebaseConfig, { useFirestoreForProfile: true, userProfile: 'users', attachAuthIsReady: true })
  )
);

动作创作者:

import { getFirestore } from "redux-firestore";

export const deleteItem = itemToDelete => {
  return (dispatch, getState, { getFirebase, getFirestore }) => {
    const firestore = getFirestore();
    const authorId = getState().firebase.auth.uid;
    const userRef = firestore.collection("users").doc(authorId);

    userRef
      .collection("todayFeed")
      .doc(itemToDelete.uid)
      .delete()
      .then(res => {
        dispatch({ type: "CHANGE_ITEM_STATE_SUCCESS", res });
      })
      .catch(err => {
        dispatch({ type: "CHANGE_ITEM_STATE_ERROR", err });
      });
  };
};

我用来react-redux-firebase在我的视图文件中获取数据。

let mapStateToProps = state => {  
  return {
    auth: state.firebase.auth,
    items:
      state.firestore.ordered.users &&
      state.firestore.ordered.users.length &&
      state.firestore.ordered.users[0].todayFeed
  };
};

export default compose(
  connect(mapStateToProps),
  firestoreConnect(props => {
    return [
      {
        collection: "users",
        doc: props.auth.uid,
        subcollections: [
          { collection: "todayFeed", orderBy: ["pubDate", "desc"] }
        ]
      }
    ];
  })
)(Dashboard);

预期的行为是什么?todayFeed删除项目后 获取预期格式的数据(不嵌入冗余字段)。

哪些版本的依赖项以及哪些浏览器和操作系统会受到此问题的影响?这在以前的版本或设置中有效吗?

操作系统:Windows 10

依赖项:

"dependencies": {
    "cors": "^2.8.5",
    "firebase": "^5.5.5",
    "googleapis": "^42.0.0",
    "moment": "^2.24.0",
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-firebaseui": "^3.1.2",
    "react-redux": "^5.0.7",
    "react-redux-firebase": "^2.3.0",
    "react-router-dom": "^4.3.1",
    "react-scripts": "2.0.5",
    "react-spring": "^5.1.3",
    "react-with-gesture": "^1.0.10",
    "redux": "^4.0.1",
    "redux-firestore": "^0.5.8",
    "redux-thunk": "^2.3.0",
    "scriptjs": "^2.5.9",
    "styled-components": "^3.2.6"
  },

标签: javascriptreactjsfirebasereduxgoogle-cloud-firestore

解决方案


推荐阅读