Size: a a a

ECMAScript Developers

2020 June 05

ES

Emir Sabyrkulov in ECMAScript Developers
αμαν
а зачем при создании нового массива пересоздавать объекты внутри? пусть лежат те же, мы просто по индексу обновим только нужный
ну так обновляя объект массива стейта, мы обновляем именно объект в стейте, ибо у нас не сам объект для обновления стейта, а поинтер. Что и есть мутация.
Раз уж мутировать, то лучше без […[] ] 🤷‍♂️
источник

α

αμαν in ECMAScript Developers
Emir Sabyrkulov
ну так обновляя объект массива стейта, мы обновляем именно объект в стейте, ибо у нас не сам объект для обновления стейта, а поинтер. Что и есть мутация.
Раз уж мутировать, то лучше без […[] ] 🤷‍♂️
не понял) можете кодом объяснить?
источник

ES

Emir Sabyrkulov in ECMAScript Developers
источник

α

αμαν in ECMAScript Developers
у меня же там в конце return {...state, exploreUsers}
источник

ES

Emir Sabyrkulov in ECMAScript Developers
ну а стейт смутирован до него здесь:
exploreUsers[action.payload.index] = {...targetUser, followers}
источник

α

αμαν in ECMAScript Developers
Emir Sabyrkulov
ну а стейт смутирован до него здесь:
exploreUsers[action.payload.index] = {...targetUser, followers}
здесь мутируется локальная переменная exploreUsers
источник

ES

Emir Sabyrkulov in ECMAScript Developers
Сам массив exploreUsers новый, но объекты внутри него так же остались поинтерами
источник

α

αμαν in ECMAScript Developers
верно
источник

α

αμαν in ECMAScript Developers
Emir Sabyrkulov
Сам массив exploreUsers новый, но объекты внутри него так же остались поинтерами
этот код мутирует, мой код - нет
источник

α

αμαν in ECMAScript Developers
хочу скинуть ссылку на репл, но в песочнице тайпскрипта не могу найти функцию share
источник

α

αμαν in ECMAScript Developers
источник

ES

Emir Sabyrkulov in ECMAScript Developers
Сорри, я тупанул. Я же имелл ввиду, что от
exploreUsers = [...state.exploreUsers]
никакого толку. Твой код ничего не мутирует, ибо фильтр возвращает новый массив. И то что можно сразу
state.exploreUsers[index].followers.filter(…)
источник

TM

Tilekmat Mamytkanov in ECMAScript Developers
Yaros Group: Middle Node.JS разработчик
Тип: Работа в офисе
30000 - 50000 KGS в месяц
Тэги: #yarosgroup #office #monthly #bishkek

Требования, контакты и условия тут:
https://devkg.com/tg/j-965

Чат и другие каналы: @devkg
источник

TM

Tilekmat Mamytkanov in ECMAScript Developers
Никто не ищет себе работу?)
источник

α

αμαν in ECMAScript Developers
Emir Sabyrkulov
Сорри, я тупанул. Я же имелл ввиду, что от
exploreUsers = [...state.exploreUsers]
никакого толку. Твой код ничего не мутирует, ибо фильтр возвращает новый массив. И то что можно сразу
state.exploreUsers[index].followers.filter(…)
да, можно и так, просто с локальной переменной выходит менее вложенный код, в котором можно явно выделить мутацию, т.е. суть функции, я отделил её empty line-ами, вертикальный код проще читать чем гармошку из {...[... и filter/map вызовов
источник

ES

Emir Sabyrkulov in ECMAScript Developers
const { exploreUsers } = state;
const { followers } = exploreUsers[action.payload.index]
const updatedFollowers = followers.filter(user => user.username !== action.payload.username)

exploreUsers[action.payload.index] = {...targetUser, followers: updatedFollowers}

return {
 ...state,
 exploreUsers
}


то же самое, но:
* видно что мы работаем с вложенным объектом.
* не создаем новый массив
* не копируем поинты из массива в стейте в локальный

Просто часто налал замечать, что делают из разрадя:
const object = { key: "value", array: [] }
const renamedObject = { ...object }
const renamedArray = [ ...object.array ]

```А еще [ ...someArrayWithObject ]
может давать ложную уверенность, что ты ничего не смутируешь, ибо ты вроде как создал новую переменную и скопировал содержимое.
источник

α

αμαν in ECMAScript Developers
Emir Sabyrkulov
const { exploreUsers } = state;
const { followers } = exploreUsers[action.payload.index]
const updatedFollowers = followers.filter(user => user.username !== action.payload.username)

exploreUsers[action.payload.index] = {...targetUser, followers: updatedFollowers}

return {
 ...state,
 exploreUsers
}


то же самое, но:
* видно что мы работаем с вложенным объектом.
* не создаем новый массив
* не копируем поинты из массива в стейте в локальный

Просто часто налал замечать, что делают из разрадя:
const object = { key: "value", array: [] }
const renamedObject = { ...object }
const renamedArray = [ ...object.array ]

```А еще [ ...someArrayWithObject ]
может давать ложную уверенность, что ты ничего не смутируешь, ибо ты вроде как создал новую переменную и скопировал содержимое.
так этот код мутирует)
источник

ES

Emir Sabyrkulov in ECMAScript Developers
с чего бы?
источник

α

αμαν in ECMAScript Developers
Emir Sabyrkulov
с чего бы?
источник

IT

Islambek Toichuev in ECMAScript Developers
да че париться проверка на массив и JSON.parse/JSON.stringify или deepClone из _
источник