Проблема в том, что хранилище redux обновляется 50+ раз в секунду, поэтому компонент отображается 50+ раз в секунду. Вы хотите, чтобы магазин обновлялся каждые n секунд, но без потери данных. Это обычная проблема для высокочастотных данных; Обычно решение состоит в использовании кеша.
Таким образом, вам нужно кэшировать результаты, а затем каждые n
секунды помещать sh кешированные сообщения в массив сообщений, а затем очищать кеш.
Это будет выглядеть примерно так.
your_websocket.on("new_message", message =>
dispatch({ action: "ADD_TO_CACHE", message })
);
setInterval(() => {
dispatch({ action: "PUSH_CACHE_TO_STATE" });
}, 1000);
const your_reducer = (state, action) => {
/* -- snip -- */
case "PUSH_CACHE_TO_STATE":
newState.messages.push(...newState.messageCache);
newState.messageCache = [];
return newState;
case "ADD_TO_CACHE":
newState.messageCache.push(action.message);
return newState;
}
Это поместит sh каждое новое сообщение в кеш, затем каждые 1000 миллисекунд кеш будет очищаться и помещаться в массив сообщений в вашем redux store.
Затем в вашем компоненте вы просто mapStateToProps вот так:
connect(store => ({ messages: store.messages }))(YourComponent);
И ваш компонент будет повторно отображаться только каждый раз, когда сообщения обновляются (раз в секунду).