В ответном веб-приложении с архитектурой потока я пытаюсь использовать Immutable.js для хранения данных, чтобы использовать быстрые сравнения toComponentUpdate.Правильный способ структурирования данных Immutable.js при передаче React Components в качестве реквизита
У меня есть хранилище, которое содержит неизменяемую карту сообщений, а затем компонент канала, который отображает все сообщения, связанные с каналом. Скажем, я установить состояние, как это:
this.state.messages = MessageStore.getMessages()
.filter(message => { message.channelId === currentChannelId});
Тогда я сделать канал, как это:
<Channel messages={this.state.messages}/>
канал не будет в состоянии сделать быстрое сравнение без проверки каждого сообщения, так как фильтр насколько мне известно, функция всегда возвращает новый объект.
Возможно ли, чтобы фильтр возвращал один и тот же базовый объект при каждом вызове, если сообщения не изменились?
Или мне нужно просто реструктурировать свои данные, чтобы в сообщениях MessageStore хранились отдельные карты для каждого канала. Таким образом, я мог бы просто:
this.state.messages = MessageStore.getMessages(currentChannelId);
А за кулисами было бы просто возвращаться конкретную карту, которая не изменится, пока не было добавлено новое сообщение.
Альтернативно, имеет смысл просто передать все сообщения компоненту канала, и он будет выполнять фильтрацию внутри себя?
Я склоняюсь к изменению структуры данных в хранилище, но задавался вопросом, не хватает ли я чего-то в том, как работает функция фильтра.