Эффективно ли отправлять данные только из прослушивателей Firebase? - PullRequest
1 голос
/ 22 марта 2019
const listRef = firebase.database().ref();

const reducer = (state = {}, action) => {
  switch (action.type) {
    case: "GET_LIST" : {
      const { list } = action;

      return { list };
    };
    case: "ADD_ELEMENT" : {
      const { elementId } = action;

      return { ...state, [elementId]: true };
    };
    default : return state;
  };
};

const getList = list => ({
  type: "GET_LIST", list
});

const addElement = elementId => ({
  type: "ADD_ELEMENT", elementId
})

const getListFromDb = () =>
  async dispatch => listRef.once("value", snap => {
    dispatch(
      getList(
        list
      )
    );
  });

const listenToElementAdded = () =>
  async dispatch => listRef.on("child_added", ({ key: elementId }) => {
    dispatch(
      addElement(
        element
      )
    );
  });

const addElementToDb = () =>
  async dispatch => dispatch(
    addElement(
      listRef.push().key
    )
  );

const Component = ({
  list,

  getListFromDb,
  listenToElementAdded,
  addElementToDb
}) => {
  useEffect(() => getListFromDb(), []);
  useEffect(() => listenToElementsAdded());

  return (
    <div>
      { Object.keys(list).map(id => <p>{id}</p>) }
      <p onClick={addElementToDb}>Add</p>
    </div>
  );
};

const mapStateToProps = list => ({ list });

const mapStateToProps = {
  getListFromDb,
  listenToElementAdded,
  addElementToDb
};

export default connect(mapStateToProps, mapStateToProps)(Component);

Упрощенный пример выше показывает, что я имею в виду. Вопрос заключается в том, достаточно ли быстры слушатели Firebase, чтобы заменить предварительную диспетчеризацию данных на избыточную?

Если мы хотим создать приложение, в котором мы хотим обновить данные в реальном времени, поступающие извне, слушатели могут помочь. Но если мы предварительно отправляем полученные данные, мы отправляем дважды. Кроме того, если мы используем только слушателей и отсылаем оттуда, это может сделать код и работу с ним намного более чистой. Но что если у нас будет много данных внутри базы данных? Слушатели будут быстрыми? Эффективно ли обрабатывать диспетчеризацию только через слушателей или стоит предварительно выполнить диспетчеризацию на месте?

1 Ответ

2 голосов
/ 22 марта 2019

Я бы порекомендовал, чтобы ваши прослушиватели событий Firebase вызывали redux-thunk действия, которые затем манипулируют и отправляют данные в ваше приложение.В этом нет ничего плохого, если все сделано правильно.

Однако рассмотрим некоторые не лучшие, но разные подходы.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * *1008* * * *Однако, если это слишком сложная интеграция (вы буквально объединяете свое приложение с firebase), тогда переходите к первому.

Несмотря на это, я рекомендую вам поискать еще немного контента об использовании firebase с вашим приложением приставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...