
Максим
05.08.2018
20:52:31
спасибо )

Alex
05.08.2018
20:53:40
Главное чтобы работало идемпотентно, state.getIn([а, 10, 32]) === state.getIn([a, 10, 32]) не смотря на разницу ссылок на ключи и отсутствующие элементы в коллекции
я решил не полагаться на наличие состояния, создаваемый мной объект является ключём эквивалентность которого можно проверить ===, плюс у меня задача делать такое:
state.getIn([a, [1, 2, 10], 32]) => []

Дмитрий
05.08.2018
20:55:17
Это работает именно так как ты описал, здесь нет противоречия. Уже работает.
Помимо всего прочего, состояния здесь тоже нет это ж иммутабл

Google

Alex
05.08.2018
20:56:57
но в таком подходе нельзя проверить эквивалентность ключей не перебрав массивы и не имея возможности getIn

Andrew
05.08.2018
20:57:30
ребзи а пояните чем подход с иммутабельностью лучше ?
вот в mobx сделали все на мутациях и не парятся

Kendr
05.08.2018
20:57:52

Alex
05.08.2018
20:58:04

Andrew
05.08.2018
20:58:10

Alex
05.08.2018
20:58:20
это не мутации, это обсерверы

Alex
05.08.2018
20:58:23

Andrew
05.08.2018
20:58:48

Alex
05.08.2018
20:59:11

Andrew
05.08.2018
21:00:00
ну реально с большими коллекциями данных, тем более есть они сильно вложенные, иммутабельность превращается в боль

Alex
05.08.2018
21:00:16

Google

Alex
05.08.2018
21:01:18
последним аргументом к переходу на мутабельность для меня стала поддержка Map, Set и подобных

Сергей
05.08.2018
21:01:33

Andrew
05.08.2018
21:03:06
циклические ссылки ?

Сергей
05.08.2018
21:03:14
нет
A -> C
B -> C

Andrey
05.08.2018
21:03:21

Andrew
05.08.2018
21:03:53

Andrey
05.08.2018
21:04:40

Andrew
05.08.2018
21:05:21
я думаю это как-то оптимизированно, что он все таки не копирует все заново

Andrey
05.08.2018
21:05:39
Верно.
Копируется только очень небольшой кусочек данных.

Alex
05.08.2018
21:06:04
но там можно мутировать же
имхо, это не корректно называть мутацией данных, так как реальные данные лежат за интерфейсом-проксей, который оповещает другие части приложения об изменениях. разработчик думает, что меняет объект по ссылке (или не подозревает это), а работает скрытый механизм, который обновляет данные и оповещает об изменениях. мутация в чистом виде - это мутация оригинального объекта с данными без посредников. подчеркиваю - это имхо.

Andrew
05.08.2018
21:06:41

Andrey
05.08.2018
21:06:55

Andrew
05.08.2018
21:07:43

Andrey
05.08.2018
21:08:31

Andrew
05.08.2018
21:08:59

Alex
05.08.2018
21:09:20

Andrew
05.08.2018
21:09:26
но коннечно иммутабл Map не хватает почти в каждом проекте

Google

Andrey
05.08.2018
21:09:51

Сергей
05.08.2018
21:10:21

Andrey
05.08.2018
21:10:41

Andrew
05.08.2018
21:11:00

Andrey
05.08.2018
21:11:01
Поэтому лучше не создавать лишних абстракций.

Alex
05.08.2018
21:11:36

Сергей
05.08.2018
21:11:43
я бы за такую хуйню руки отрубал…

Andrey
05.08.2018
21:12:09

Kendr
05.08.2018
21:12:16
Да плюс

Alex
05.08.2018
21:12:24

Andrey
05.08.2018
21:12:51

Bear
05.08.2018
21:13:06

Andrey
05.08.2018
21:13:08
Или ты предлагаешь усложнить апи?

Дмитрий
05.08.2018
21:13:52

Bear
05.08.2018
21:14:44
Пока в JS нельзя сделать красивые и короткие(это важно) геттеры-сеттеры и полностью заприваченные переменные, будем теребить setState

Alex
05.08.2018
21:14:48
Что ты будешь делать с колбеком?
это не хорошее решение, это просто пример. просто хотел показать, что думая что ты мутируешь исходный объект, ты на самом деле работаешь с механизмом, который допустим может использовать Immutable для операций с данными.

Andrew
05.08.2018
21:15:16

Bear
05.08.2018
21:15:33

Google

Andrew
05.08.2018
21:15:36
логика обновлени стейта чуть более сложная
еще и собирает апдейты в банчи

Alex
05.08.2018
21:15:56

Andrew
05.08.2018
21:15:59
если их много сразу
кроче не каждый setState вызовет ререндер

Сергей
05.08.2018
21:16:13

Admin
ERROR: S client not available

Bear
05.08.2018
21:21:41
логика обновлени стейта чуть более сложная
Если представить, что в ЖС есть ява/си-подобные приватные переменные и геттеры-сеттеры, то я механику представил бы так:
У компонента есть открытый рендер-метод, который при вызове возвращает html-подобный код, попутно вызывая рендеры и своих детишек. При изменении приватной переменной, рендер запускается заново. Получить приватную переменную можно всегда и везде геттером. Но, в данный момент, без адовых костылей такого не будет, поэтому setState. И, само собой, грамотно мержить состояния и рендерить не весь блок тоже нужно, но оно уже есть.

Дмитрий
05.08.2018
21:23:25

Сергей
05.08.2018
21:24:35
Если представить, что в ЖС есть ява/си-подобные приватные переменные и геттеры-сеттеры, то я механику представил бы так:
У компонента есть открытый рендер-метод, который при вызове возвращает html-подобный код, попутно вызывая рендеры и своих детишек. При изменении приватной переменной, рендер запускается заново. Получить приватную переменную можно всегда и везде геттером. Но, в данный момент, без адовых костылей такого не будет, поэтому setState. И, само собой, грамотно мержить состояния и рендерить не весь блок тоже нужно, но оно уже есть.
геттеры сеттеры в стиле жс это бредятина

Дмитрий
05.08.2018
21:24:40

Andrew
05.08.2018
21:24:40

Andrey
05.08.2018
21:25:01

Дмитрий
05.08.2018
21:25:05

Сергей
05.08.2018
21:25:06

Alex
05.08.2018
21:25:15

Дмитрий
05.08.2018
21:25:27

Andrey
05.08.2018
21:25:28

Сергей
05.08.2018
21:25:37

Google

Andrey
05.08.2018
21:25:44

Сергей
05.08.2018
21:25:56
c#
а, точно.
Забыл этот говноязык

Дмитрий
05.08.2018
21:26:06
Сильно)

Andrey
05.08.2018
21:26:07
Пасибки :D
/me закрыл райдер.

Дмитрий
05.08.2018
21:26:26
Ничего не имею против ноты до диез

Сергей
05.08.2018
21:27:20
адовая конструкция эти геттеры.
особенно в mobx…

Andrey
05.08.2018
21:27:41
А в шарпе ты без IDE не выживешь, поэтому и проблем нет.

Сергей
05.08.2018
21:28:03

Andrey
05.08.2018
21:28:33

Сергей
05.08.2018
21:28:50

Andrey
05.08.2018
21:29:22
kek

Alex
05.08.2018
21:29:24
походу блокнот ты юзаешь или vs code, тем язык лучше

Andrey
05.08.2018
21:29:42

Сергей
05.08.2018
21:29:55
если код на языке легко понимать без IDE, это хороший язык

Alex
05.08.2018
21:30:26
где урна для js?