Компонент А получат с сервера сообщение и записывает его в 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
});
}
Судя по коду, вы каждый раз перезаписываете 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 в цикле. Если они вызываются один за другим, то они группируются.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости