在 redux-saga-firebase 中获取集合引用



我无法使用redux-saga-firebase定义集合引用。我试图这样定义它:

const query = rsf.firestore.collection('players').where('up', '>', lastUpdated);

但我正在得到

类型错误: _firebase_firebase__WEBPACK_IMPORTED_MODULE_6__.rsf.firestore.collection 不是一个函数

我也尝试过使用此处描述的.reference()无济于事。我正在尝试根据此建议限制从集合同步的文档数量。如何获取用于此函数的集合引用?

import { rsf } from '../../firebase/firebase';
export function* getPlayersFromDb() {
const players = yield select(getPlayers);
const lastUpdated = Math.max(...players.map(x => x.up));
const query = rsf.firestore.collection('players').where('up', '>', lastUpdated);
yield fork(
rsf.firestore.syncCollection,
query,
{ successActionCreator: response => ({
type: t.GET_PLAYERS_FROM_DB_SUCCESS,
payload: [...response],
}),
failureActionCreator: () => ({
type: t.GET_PLAYERS_FROM_DB_FAILURE,
payload: [],
}),
transform: response => messageTransformer(response),
}
);

}

你的代码的问题在于你正在混合官方的firestore SDK库和redux-saga-firestore库。如果你想得到一个collectionReference你必须使用官方SDK来完成,因为redux-saga-firestore库不提供返回该输出的方法。

因此,为了获得collectionReference,您需要导入Firestore SDK并使用与getPlayersFromDb函数上已有的几乎相同的代码,如下所示:

const firebase = require("firebase");
require("firebase/firestore");
var db = firebase.firestore();
...
export function* getPlayersFromDb() {
...
const query = db.collection('players').where('up', '>', lastUpdated);
...
}

注意:正如您在此 redux-saga-firestore 文档中看到的那样,您可以使用getCollection方法,但由于您有一个where子句,因此无论如何您都需要使用collectionReference来过滤它,所以我担心 redux-saga-firestore 没有真正的解决方案。

希望这有帮助

最新更新