uks*_*ksz 5 firebase react-native redux redux-saga
我正在构建 react-native 应用程序,我在其中使用react-native-firebase
和redux-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));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,现在我被困在我想订阅该集合的地方。在react-native-firebase
我将使用以下内容:
firebase.firestore().collection('users').onSnapshot(...)
Run Code Online (Sandbox Code Playgroud)
我不确定在redux-saga
. 你能告诉我我可以在未来使用 onSnapshots(可测试的)的模式吗?
使用 redux-saga 订阅 firestore 集合的最简单方法是使用频道:
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))
}
}
Run Code Online (Sandbox Code Playgroud)
successAction(data)
每次 firebase 将更改推送到您的客户端时,这将调度一个操作(由)。
您还可以使用像redux-saga-firebase这样的库来自动化这部分,只需使用:
function * syncUsers () {
yield fork(rsf.firestore.syncCollection, 'users', {
successActionCreator: successAction,
failureActionCreator: errorAction
})
}
Run Code Online (Sandbox Code Playgroud)
免责声明:我是redux-saga-firebase 的作者。
更新: redux-saga-firebase 不再维护并且与 Firebase 8 不兼容。
归档时间: |
|
查看次数: |
2755 次 |
最近记录: |