gpt4 book ai didi

firebase - 将 firebase 与 redux-saga 连接的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 01:44:49 25 4
gpt4 key购买 nike

我正在构建 react-native 应用程序,我使用 react-native-firebaseredux-saga .这是我使用 redux-saga 的第一个项目,因此我正在学习。到目前为止,我使用以下方法对用户进行了身份验证:

import firebase from 'react-native-firebase';

function* loginEmlPwdSaga(action) {
try {
const auth = firebase.auth();
const data = yield call(
[auth, auth.signInAndRetrieveDataWithEmailAndPassword],
action.email,
action.password,
);
yield put(loginSuccess(data));
} catch (error) {
yield put(loginFail(error));
}
}

但是,现在我被困在我想订阅该集合的地方。在 react-native-firebase我会使用以下内容:
firebase.firestore().collection('users').onSnapshot(...)

我不确定在 redux-saga 中处理订阅的最佳方法是什么.你能告诉我我可以在 future 使用 onSnapshots(可测试的)的模式吗?

最佳答案

使用 redux-saga 订阅 firestore 集合的最简单方法是使用 channel :

function * syncUsers () {
const ref = app.firestore().collection('users')
const channel = eventChannel(emit => ref.onSnapshot(emit))

try {
while (true) {
const data = yield take(channel)
yield put(successAction(data))
}
} catch (err) {
yield put(errorAction(err))
}
}
每次 firebase 将更改推送到您的客户端时,这将调度一个操作(由 successAction(data) 创建)。
您还可以使用像 redux-saga-firebase 这样的库。自动化这部分并简单地使用:
function * syncUsers () {
yield fork(rsf.firestore.syncCollection, 'users', {
successActionCreator: successAction,
failureActionCreator: errorAction
})
}

Disclaimer: I'm the author of redux-saga-firebase.


UPDATE: redux-saga-firebase is no longer maintained and is not compatible with Firebase 8.

关于firebase - 将 firebase 与 redux-saga 连接的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50668964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com