@react_js

Страница 4550 из 5115
Максим
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
Andrew
05.08.2018
20:58:10
Alex
05.08.2018
20:58:20
это не мутации, это обсерверы

Alex
05.08.2018
20:58:23
ребзи а пояните чем подход с иммутабельностью лучше ?
я не в курсе, предполагаю что в редаксе ты никак не отследишь что изменилось без иммутабельности и что можно работать с ненормализованными данными

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

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

Andrew
05.08.2018
21:03:53
A -> C B -> C
понял, когда ссылаются на одну сущность

С чего вдруг?
ну все уровни вложенности заново скопировать

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:08:31
а где можно почитать про внутренний механизм работы с объектами ?
Нужен массив - используй иммутабельный массив. Нужно дерево, используй дерево. Забудь про объекты.

Alex
05.08.2018
21:09:20
ну как бы да, мы ж обращаемся не на прямую к стору а через прокси
например в vue похожий механизм сделанный на геттерах/сеттерах, можно было тоже самое добавить и в react и вместо setState использовать this.state.myVariable = 2, что ИМХО не является мутацией оригинальных данных, а просто надстройка или синтаксический сахар.

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:11:01
Поэтому лучше не создавать лишних абстракций.

this.setState декларативно
this.setState позволяет коллбек прокинуть.

Alex
05.08.2018
21:11:36
Не нужно, всё равно setState понадобится.
state = { set myVariable = value => { this.setState({ myVariable: value }) } }

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

Andrey
05.08.2018
21:12:09
state = { set myVariable = value => { this.setState({ myVariable: value }) } }
Прекрасно, а теперь вариант, когда у тебя есть зависимость от стейта или пропсов.

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

Alex
05.08.2018
21:12:24
я бы за такую хуйню руки отрубал…
это в виде гипотетического наброска иллюстрирующего синтаксический сахар

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 для операций с данными.

Bear
05.08.2018
21:15:33
setState не просто сеттер
Да, знаю, он мержит, по-правильному говоря

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

еще и собирает апдейты в банчи

Alex
05.08.2018
21:15:56
this.state.myVariable = 2 Но это и есть мутация
это выглядит как мутация, по факту работает setState (через сеттер), который мерджит объекты.

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
Пока в JS нельзя сделать красивые и короткие(это важно) геттеры-сеттеры и полностью заприваченные переменные, будем теребить setState
У меня уже около месяца в проде приватные поля, пока что особого желания пользоваться ими не обнаруживал

Дмитрий
05.08.2018
21:24:40
это выглядит как мутация, по факту работает setState (через сеттер), который мерджит объекты.
И триггерит цепную реакцию переворачивания фишек в алгоритме мобикса

Andrey
05.08.2018
21:25:01
геттеры сеттеры в стиле жс это бредятина
А есть в другом стиле где-то?

Дмитрий
05.08.2018
21:25:05
Сергей
05.08.2018
21:25:06
это те которые через # или TS ?
те которые в тс не существуют в жс

А есть в другом стиле где-то?
во всех остальных языках

Alex
05.08.2018
21:25:15
Andrey
05.08.2018
21:25:28
во всех остальных языках
Не вижу разницы с остальными языками.

Сергей
05.08.2018
21:25:37
Не вижу разницы с остальными языками.
бляя там методы здесь геттеры some.setValue(value) vs some.value = value

Google
Сергей
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
адовая конструкция эти геттеры. особенно в mobx…
Просто js - это динамика, вот и все проблемы.

А в шарпе ты без IDE не выживешь, поэтому и проблем нет.

Сергей
05.08.2018
21:28:03
А в шарпе ты без IDE не выживешь, поэтому и проблем нет.
что тоже не говорит в пользу языка (в плюсах даже с IDE очень сложно жить)

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
походу блокнот ты юзаешь или vs code, тем язык лучше
А вот это реально распарсить проблема.

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

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

Страница 4550 из 5115