Nikulio
@Nikulio
NaN !== NaN

Как дать команду на ре-рендер после добавления элемента в firebase?

Всем привет
При загрузке получаю все посты в componentDidMount(), но при добавлении нового элемента список обновляется только при перезагрузке страницы.
Код:

addMessage = e => {
    e.preventDefault();
    let data = {
      component: this.state.component,
      component_name: this.state.component_name,
    };
    this.props.addComponent(data);
  };

export const addComponent = data => async dispatch => {
  let comps = await fire.database().ref('components');
  comps.push({
    name : data.component,
    comp: data.component_name,
  });
};

Единственный вариант, который нашел - убрать e.preventDefault(), но это не очень нравится.
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 2
gadfi
@gadfi
https://gamega.org
так у вас же по идее есть рабочая подписка, вы добавили данные а в событии on() они уже обновились
Ответ написан
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Вам нужно подписаться на события от Firebase (API документация - может здесь, может где-то еще в доке, должно быть что-то связанное с "сообщениями от базы", скорее всего здесь).

Далее, когда вам приходить событие в стиле: в_базу_добавился_новый_элемент вы должны вызвать action, который будет обновлять у вас в сторе ваши данные. Таким образом, если тут все правильно приготовить, то у вас в компонент придут новые пропсы и он перерисуется.

То есть, здесь совсем не понадобятся методы жизненного цикла у компонентов (разве что, componentWillReceiveProps в будущем, но пока точно без него можно сделать).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы