我正在尝试将从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()
函数而又不将动作逻辑包装在该函数中?
答案 0 :(得分:0)
我不确定为什么这样做有效,但是在等待答复时,我选择了从退货改为派遣。
dispatch({ type: actionTypes.QUERYBIDDER, Query: Query });
这解决了我的问题。寻找一个更彻底的答案,了解它为什么起作用以及我上面的原始问题。
答案 1 :(得分:0)
有关使用分派的redux文档-This is the only way to trigger a state change
。因此,基本上,如果您想更改redux状态,则应该分派带有参数的操作-动作类型和新数据。
您可以了解有关Redux派发here
的更多信息