首页 > 解决方案 > 已选择要删除的产品 ID,但产品数据仍在 Firebase 上

问题描述

我正在通过 redux-saga 实现删除产品功能,这是我的 deleteProduct 功能代码

import firebaseApp from "./config";

const firebaseDb = firebaseApp.database();

export const deleteProduct = (productId) => {


return firebaseDb
    .ref("products")
    .child(productId)
    .remove()
    .then(() => {
      console.log(`Deleted ${productId}`)
      return { status: "ok" }
    })
    .catch(() => ({ status: "error" }));
}

在我运行单击删除按钮后,它已经显示产品 id 已被删除,但产品数据并未从数据库中删除。

这是我的reducer

const deleteProductRequest = (state, action) => ({
  ...state,
  loading: true,
  type: action.type,
});

const deleteProductSuccess = (state, action) => ({
  ...state,
  loading: false,
  product: action.data,
  type: action.type,
});

const deleteProductFailure = (state, action) => ({
  ...state,
  loading: false,
  error: action.error,
  type: action.type,
});

这是我的saga

export function* deleteProductRequest(action) {
  try {
    const { productId } = action;
    const response = yield call(deleteProduct, productId);

    if ((response.status === "ok")) {
      yield put(Creators.deleteProductSuccess(response.product));
    } else {
      yield put(Creators.deleteProductFailure(response.error));
    }
  } catch (error) {
    yield put(Creators.deleteProductFailure(error));
  }
}

我的容器是这样的

import { connect } from "react-redux";
import { Creators } from "../../actions/productAction";
import ProductTable from "../../pages/ProductTable";

const mapStateToProps = (state) => ({
  products: state.product.products,
  product: state.product.product,
  loading: state.product.loading,
  error: state.product.error,
});

const mapDispatchToProps = {
  ...Creators,
};

const PostNewContainer = connect(
  mapStateToProps,
  mapDispatchToProps
)(ProductTable);

export default PostNewContainer;

首先,我将所有产品列表从 Firebase 获取到一个表中,然后我开始执行产品操作,并逐步实现 API、reducer 和 Saga

任何人都了解此案,请您支持我。太感谢了

标签: reactjsfirebasefirebase-realtime-databaseredux-saga

解决方案


firebaseDb.ref("products").child(productId)is aReference和 aReference没有removeValue()方法。

您应该使用remove()如下方法:

return firebaseDb
  .ref("products")
  .child(productId)
  .remove();

推荐阅读