Итак, я в настоящее время следую учебному пособию, где автор использует Redux для обновления данных в реальном времени с помощью базы данных в реальном времени.Внутри файла с избыточностью он использует метод .on, например так:
const watchPersonData = () => {
return function(dispatch) {
firebase.database().ref("person").on("value", function(snapshot) {
var personData = snapshot.val();
var actionSetPersonData = setPersonData(personData);
dispatch(actionSetPersonData);
}, function(error) { console.log(error); });
}
};
Однако я хочу использовать облачное хранилище, поэтому я попытался преобразовать этот код с помощью метода onSnapshot.Тем не менее, пользователь не определен:
const watchPersonData = () => {
return function(dispatch){
db.collection('user').doc().onSnapshot(function(snap){
var personData = snap.val();
var actionSetPersonData = setPersonData(personData);
dispatch(actionSetPersonData);
})
}
};
В настоящее время у меня есть коллекция с именем 'user', и в этой коллекции есть документ с автоматически сгенерированным идентификатором (поэтому doc () пуст) и внутри этого документа aСтрока называется имя пользователя.Любые идеи, почему this.props.personData.username не определен в консоли?
Весь файл app-redux:
import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import * as firebase from 'firebase';
const db = firebase.firestore;
var config = {
//config data for firebase
};
firebase.initializeApp(config);
const initialState = {
personData: { },
}
const reducer = (state = initialState, action) => {
switch(action.type){
case 'setPersonData':
return { ...state, personData: action.value};
default:
return state;
}
}
const store = createStore(reducer, applyMiddleware(thunkMiddleware));
const setPersonData = (personData) => {
return{
type: "setPersonData",
value: personData
};
};
const watchPersonData = () => {
return function(dispatch){
console.log('called')
db.collection('user').doc().onSnapshot(function(snap){
console.log(snap)
var personData = snap;
var actionSetPersonData = setPersonData(personData);
dispatch(actionSetPersonData);
})
}
};
export { setPersonData, watchPersonData};
export { store };
Спасибо всем!заблаговременно!