Если вы хотите использовать одни и те же данные между несколькими экранами, лучше всего использовать Redux.
Используя Redux, все ваши функции рендеринга (для которых требуются определенные c данные из магазина) будут автоматически refre sh, если данные обновлены. Таким образом, вы можете обрабатывать только один слушатель firebase для обновления вашего хранилища redux.
Я бы создал редуктор «Post» и отправлял бы действие обновления каждый раз, когда я получал что-то новое от слушателя firebase.
// Actions
const ADD = 'post/ADD';
const UPDATE = 'post/UPDATE';
// Initial state
const initialState = {
posts: [],
};
// Reducer
export default function reducer(state = initialState, action = {}) {
switch (action.type) {
case ADD:
return {
...state,
posts: [...state.posts, action.post]
};
case UPDATE:
return {
...state,
posts: action.posts
};
default:
return state;
}
}
// Action Creators
export function addPost(post) {
return {
type: ADD,
post
};
}
export function updatePosts(posts) {
return {
type: UPDATE,
posts
};
}
И слушатель будет вроде:
import { update } from 'PostRedux.js'
firebase
.database()
.ref("users/" + currentUser.uid + "/posts")
.on("value", snapshot => {
Store.dispatch(update(snapshot.val()));
});