Как получить элемент списка из firebase с утками, используя крючки для реагирования? - PullRequest
0 голосов
/ 27 февраля 2020

Я выполняю рефакторинг приложения и не знаю, как мне получить значения данных из firebase с приложением, использующим ducks / reduxsauce.

У меня есть файл /store/ducks/restaurants.js с ActionCreators - функции с задачами, экспортируемыми отдельно. Эти функции получают список результатов базы данных firebase. Но я не понимаю, как получить к нему доступ и получить результаты.

Файл /store/ducks/restaurant.js:

//import { getFirebase } from "react-redux-firebase";
//import { getFirestore } from "redux-firestore";
import { createActions, createReducer } from "reduxsauce";

export const { Types, Creators } = createActions({
  setRestaurant: ["restaurantInfo"],
  setRestaurantList: ["restaurantList"],
  clearRestaurant: null
});

const INITIAL_STATE = {
  loading: false,
  data: {},
  list: {}
};

const setRestaurant = (state = INITIAL_STATE, action) => {
  return {
    ...state,
    loading: false,
    data: action.restaurantInfo
  };
};
const setRestaurantList = (state = INITIAL_STATE, action) => {
  return {
    ...state,
    loading: false,
    list: action.restaurantList
  };
};
const clearRestaurant = (state = INITIAL_STATE, action) => {
  return {
    ...INITIAL_STATE
  };
};

export const syncRestaurantList = ({ city = null, uf = null } = {}) => {
  return (dispatch, getState, { getFirebase, getFirestore }) => {
    const firestore = getFirestore();
    const firebase = getFirebase();

    let restaurantsRef = firestore.collection("restaurants");
    if (uf) {
      restaurantsRef = restaurantsRef.where("uf", "==", uf);
    }
    if (cidade) {
      restaurantsRef = restaurantsRef.where("city", "==", city);
    }

    restaurantsRef.onSnapshot(snap => {
      let list = {};
      snap.forEach(doc => {
        const data = doc.data();
        const id = doc.id;
        list[id] = data;
      });
      dispatch(Creators.setRestaurantList(list));
    });
  };
};


export default createReducer(INITIAL_STATE, {
  [Types.SET_RESTAURANT]: setRestaurant,
  [Types.CLEAR_RESTAURANT]: clearRestaurant,
  [Types.SET_RESTAURANT_LIST]: setRestaurantList
});

Как получить доступ к syncRestaurantList результатов со страницы?

...