react js setState очередь

138
28 марта 2018, 06:54

Компонент А получат с сервера сообщение и записывает его в newMessage . компонент В следит за newMessage и при обновлении вставляет его в массив и рендерит. Но если сообщения приходят быстро, то newMessage перезаписывается до того как обновится страница.

Пример:

for (let i = 0; i < 5; ++i) {//предположим что это сервер присылает сообщения
     this.setState({
          newMessage:i
         });
}

Ожидаемый результат: 0 1 2 3 4.

На самом деле: 4.

Можно их как то поставить в очередь(средствами react)???

UPDATE

COMPONENT A

//msg {id:'...', content:'...', date:'...', ...}
    reciveMessage(msg){//<-- сюда сервер присылает сообщение.
       this.setState({
                  newMessage:msg
                 });
    }

COMPONENT B

//Компонент должен увидеть что **newMessage** изменилось и добавить его в  список. 
    componentWillReceiveProps(nextProps) {
    let list = this.state.MyMessagesList.slice();
    list.push(nextProps.newMessage);
    this.setState({
           MyMessagesList:list
           });
    }
Answer 1

Судя по коду, вы каждый раз перезаписываете newMessage, чтобы получилась такая строка, нужно делать конкатенацию строк:

this.setState({ newMessage: this.state.newMessage + ' ' + i })

UPD: Извиняюсь, неверно написал, судя по документации:

setState() does not immediately mutate this.state but creates a pending state transition. Accessing this.state after calling this method can potentially return the existing value. There is no guarantee of synchronous operation of calls to setState and calls may be batched for performance gains.

Нельзя вызывать setState в цикле. Если они вызываются один за другим, то они группируются.

READ ALSO
Как работа с библиотекой node-xlsx?

Как работа с библиотекой node-xlsx?

Здравствуйте! На работе нужно собрать xlsx файл по макету "Табель учета рабочего времени", вот ссылка на пример: pptru/rabochee-vremia/zapolnenie-tabelya Изучал...

147
Запись в скобках после for [дубликат]

Запись в скобках после for [дубликат]

На данный вопрос уже ответили:

146
Swiper slider c полосой прокрутки и прогресс-баром

Swiper slider c полосой прокрутки и прогресс-баром

Допилила прогресс-бар для прокруткиНо работает он кривовато

145