Почему не патчишь старую коллекцию элементов в MobX при получении новых данных

«Почему не патчишь старую коллекцию элементов в MobX при получении новых данных» — вопрос из категории Библиотеки, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При обновлении коллекции в MobX важно учитывать реактивность. Если просто заменить старую коллекцию новой (например, this.items = newItems), все наблюдатели потерят связь с исходными данными.

Лучше патчить существующую коллекцию, сохраняя ссылки на объекты:

// Плохо - теряем реактивность
this.items = newItems;

// Хорошо - сохраняем реактивность
this.items.replace(newItems); // для массивов
// Или для объектов:
Object.keys(newItems).forEach(key => {
  if (this.items[key]) {
    Object.assign(this.items[key], newItems[key]);
  } else {
    this.items[key] = newItems[key];
  }
});

Такой подход сохраняет существующие наблюдатели и обновляет данные реактивно.