PolyakhAleksandr
@PolyakhAleksandr

В списке меняется один элемент, происходит рендер все остальных(Immutable + memoize) ReactJS, что не так делаю?

В списке меняется один элемент, происходит рендер все остальных(Immutable + memoize)

Полностью готовый пример https://stackblitz.com/edit/react-lyx4ka?file=redu...

Есть массив(OrderedMap из ImmutableJS), который содержит объект с такими данными { id: 1, isActive: false, text: ‘item-1’ }. Список мы храним в store(redux) По нажатию на элемент, мы меняем значение поля isActive с false => true. В компонент List передую имутабельную структуру OrderedMap, после с помощью функции lodash/memoize запоминаю объект:

function normalizeList(list) { return list.valueSeq().toArray(); } const memoizeList = memoize(normalizeList); const handleSelectedItem = (id) => updateData(id);

Элементы списка это Item(компоненты)

Происходит перерендер всех элементов после нажатия на один из них, хотя если все поля без изменений это не новый объект(ссылка на него).
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
pterodaktil
@pterodaktil
js developer
return <Item
          onClick={handleSelectedItem.bind(List, item.id)}
          key={item.key}
          isActive={item.isActive}
          text={item.text}
        />

key={item.id}
стоит заглядывать в консоль иногда
P.S. components -> page -> Home -> components -> List -> components -> Item - это нехорошо
components -> Pages -> Home -> index.js
components -> List -> List.js, ListItem.js
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы