Redux-减速器未被调用

时间:2019-10-12 19:14:37

标签: reactjs firebase firebase-realtime-database redux

客观

我正在尝试将从Firestore中获得的一些对象传递到我的reducer中,以便可以将一些结果显示给用户。

问题

当我尝试调用并将查询传递给reducer时,它似乎不起作用。我正在运行console.log以查看reducer是否被调用,但没有在后面显示。我认为是因为我嵌套了return语句吗?,这是真的吗?

这是我的动作:

export const queryBidder = (value) => {
  return async (dispatch, getState, { getFirestore }) => {
    const firestore = getFirestore();
    const normalizeValue = _.capitalize(value);
    let Query = []
    firestore.collection("bidders").where("firstname", ">=", normalizeValue).get()
    .then(snapshot => {
      if (snapshot.empty) {
        console.log('No matching bidders.');
        return;
      }  
      snapshot.forEach(doc => {
        Query.push(doc.data());
        return { type: actionTypes.QUERYBIDDER, Query: Query };
      });

    })
    .catch(err => {
      console.log('Error getting documents', err);
    });
  }
};

当我将return语句放在异步return语句上方时,一切都很好。但是,我需要能够致电getFirestore()。此设置来自我在Udemy上找到的教程,说实话,我不太了解。

return async (dispatch, getState, { getFirestore })

这些如何传递?他们来自哪里?为什么顺序很重要?如何仅访问getfirestore()函数而又不将动作逻辑包装在该函数中?

2 个答案:

答案 0 :(得分:0)

我不确定为什么这样做有效,但是在等待答复时,我选择了从退货改为派遣。

dispatch({ type: actionTypes.QUERYBIDDER, Query: Query });

这解决了我的问题。寻找一个更彻底的答案,了解它为什么起作用以及我上面的原始问题。

答案 1 :(得分:0)

有关使用分派的redux文档-This is the only way to trigger a state change。因此,基本上,如果您想更改redux状态,则应该分派带有参数的操作-动作类型和新数据。

您可以了解有关Redux派发here

的更多信息