Size: a a a

Советский Angular

2021 April 05

DT

Dmitriy Teplov in Советский Angular
я просто не понимаю смысла, если значения аргумента нет
источник

E

Eugene in Советский Angular
производственная необходимость
источник

IE

Igor' Ember in Советский Angular
Да, именно через нест с ней познакомилась
источник

MG

Moe Green in Советский Angular
👍
источник

IV

Ilya Verpovsky in Советский Angular
Вот по поводу обсуждения из голосового чата, я вот сколько с Angular работаю, не понимаю, зачем нужно Immutable.js или immer. В javaScript всё равно же нет многопоточности.
источник

DT

Dmitriy Teplov in Советский Angular
причём тут многопоточность?
источник

IV

Ilya Verpovsky in Советский Angular
проблема блокировки в многопоточности.
источник

DT

Dmitriy Teplov in Советский Angular
Если у тебя есть механизмы, опирающиеся на то, что данные иммутабельны (например change detection OnChange), то ты не можешь делать мутации (вроде array.push(value)).

Эти либы помогают работать со вложенными структурами, чтобы вместо

function update(old, newNestedValue) {
 return {
   ...old,
   a: {
     ...old.a,
     b: {
       old.a.b,
       c: newNestedValue
     }
   }
 }
}


можно было написать

function update(old, newNestedValue) {
 return produce(draft => {
   draft.a.b.c = newNestedValue;
   return draft;
 }
}


Как пример
источник

DT

Dmitriy Teplov in Советский Angular
у нас есть асинхронность
источник

IV

Ilya Verpovsky in Советский Angular
Понятно, в голосовом чате тоже обсудили. У меня не было никогда сложных вложенных структур, поэтому и проблемы такой не возникало.
источник

IV

Ilya Verpovsky in Советский Angular
Просто в других языках с многопоточностью есть проблемы взаимоблокировок во время записи в один блок памяти.
И в других языка иммутабельностью обычно решают именно эту проблему.
В асинхронном коде в одном потоке такой проблемы не возникает.

Обычная пишут, что:
> Неизменяемые объекты интересны, например, тем, что потоко-безопасны.
источник

DT

Dmitriy Teplov in Советский Angular
Ну вот частный пример с асинхронностью
источник

DT

Dmitriy Teplov in Советский Angular
вот решение
источник

IV

Ilya Verpovsky in Советский Angular
Это я понял.
Ну тут программист так написал, наверное он так и хотел. Потоко-безопаснть это всё-таки когда программа может зависнуть, а может и нет при использовании мутабельных объектов.

Можно и так написать :)
const a = { ...state.a }
источник

DT

Dmitriy Teplov in Советский Angular
а вот пример с immer
источник

DT

Dmitriy Teplov in Советский Angular
так мы и не говорим про потоки
источник

IV

Ilya Verpovsky in Советский Angular
Я вроде в таких ситуациях пишу так:
state.a = { ...state.a, b: false };
Должно так тоже работать. Для конкретно этого теста :)
А так я всё понятно для чего теперь. Спасибо.
источник

DT

Dmitriy Teplov in Советский Angular
ну вот пример

здесь структура данных неудобная для записи, но удобная для чтения

предлагаю тебе написать то же самое без мутаций)
источник

DT

Dmitriy Teplov in Советский Angular
в целом, тоже не сложно, но читать будет проблемно
источник

DT

Dmitriy Teplov in Советский Angular
З.Ы. я не агитирую за использование подобных либ, но вопрос был "Зачем, ведь нет многопоточности"
источник