Итак, по сути, я использую Create-React-App и хочу разрешить пользователям добавлять данные в Redx как в автономном, так и в онлайн-режиме. Я также хочу синхронизировать Redx с Firestore.
В своей основной попытке я инициализирую свои настройки Firebase:
// ./firebase/firebase.js
var firestoreDatabase;
firebase.initializeApp(config.firebase.config);
firebase.firestore().enablePersistence().then(() => {
firestoreDatabase = firebase.firestore();
});
export { firebase, firestoreDatabase };
Затем, чтобы убедиться, что это сработало правильно (это определенно неправильно, но я не могу найти лучшее место, чтобы поймать enablePersistence()
возврат ...):
// src/index.js
import { firebase, firestoreDatabase } from "./firebase/firebase";
firebase.auth().onAuthStateChanged(user => {
store.dispatch(setReduxData()).then(() => {
if (firestoreDatabase) {
ReactDOM.render(application, document.getElementById("root"));
}
});
});
ФАЙЛ ДЕЙСТВИЙ
import { firestoreDatabase } from "../firebase/firebase";
export const setReduxData = () => {
return (dispatch, getState) => {
const uid = getState().auth.uid;
const data = { newData: '123' };
return firestoreDatabase
.collection("Users")
.doc(uid)
.collection("data")
.add(data)
.then(ref => {
// so, this never gets fired
dispatch(
addData({
id: ref.id,
...data
})
);
})
Таким образом, dispatch
никогда не срабатывает, однако, когда я обновляю приложение, введенные мной данные { newData: '123' }
добавляются в хранилище.
Я думаю, что весь мой способ справиться с этим неправильный. Мне не нравится экспортировать firestoreDatabase
как неопределенное, а затем обновлять его, когда enablePersistence()
возвращает ...
Я хотел бы просто enablePersistence()
один раз, а затем использовать кеш или сервер в зависимости от того, подключен пользователь или нет ... Redux должен работать одинаково независимо от *
Любые мысли и отзывы приветствуются!