Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.167.196] |
|
Сообщ.
#1
,
|
|
|
Перейду сразу к вопросу. См ниже код
// import update from 'react-addons-update'; import update from 'immutability-helper'; import sortBy from 'sort-by'; const items = [ { name: 'Edward', value: 21 }, { name: 'Sharpe', value: 37 }, { name: 'And', value: 45 }, { name: 'The', value: -12 }, { name: 'Magnetic', value: 13 }, { name: 'Zeros', value: 37 } ]; const newItems = update(items, { $apply: items => { return items.sort(sortBy('name')) } }); console.log(items); console.log(newItems); Если юзать immutability-helper, то исходный массив всеравно изменяется! а если react-addons-update, то все пучком исходный массив не изменяется. В доках пишут что react-addons-update устарел и надо юзать immutability-helper https://reactjs.org/docs/update.html В чем подвох? Как то не понятен |
Сообщ.
#2
,
|
|
|
Сам все порешал
Короче пришлось капаться в исходниках immutability-helper и react-addons-update и сравнивать их. Вот что я обнаружил оказывается в react-addons-update вначале c исходного объекта или массива делают его копию! А уже потом идет вызов $apply или других $... . В случае immutability-helper копия не делается. Итак фиксим след образом: const newItems = update(items, { $splace: [[0,0]], // делаем копию items $apply: items => { return items.sort(sortBy('name')) } }); Гениально! пс. $splice можно заменить на любую $... все они кроме $apply предварительно делают копию исходного объекта |
Сообщ.
#3
,
|
|
|
const newItems = update(items.slice(0), { ... }); |
Сообщ.
#4
,
|
|
|
Цитата Serafim @ const newItems = update(items.slice(0), { ... }); Гениально! |