
kana
18.02.2018
23:05:36
ебучий mobx, как он меня бесит

andretshurotshka?❄️кде
18.02.2018
23:05:42
удали

kana
18.02.2018
23:05:47
нет

Сергей
18.02.2018
23:05:47
+

Google

Сергей
18.02.2018
23:05:50
удали
упрости себе жизнь
npm install redux-most most

kana
18.02.2018
23:06:28
я был бы только рад, но мне тогда нужно будет сидеть ночь и переписывать проект старый

Сергей
18.02.2018
23:06:36
всего одну ночь
у тебя их ещё столько в жизни будет, уххх
закачаешься

kana
18.02.2018
23:08:29
нужно его форкать
чтобы пробрасывать объект с апишками

Kelin
18.02.2018
23:13:33
Как я это пропустил
топ 3 фреймворков для реакта)
Аааааааааааааааааааааа

Google

Kelin
18.02.2018
23:16:19
Реакт это фреймворк ?
чшш
пусть Сергей ответит
без гуглежа
react библиотека
Красава ?
flux/redux фреймворки, ты спросил для верстки или для чего фреймворки?
блядь
нет
Че это за челик лол

Дмитрий
18.02.2018
23:19:20

kana
18.02.2018
23:22:43
какие бывают кейсы, что computed не перевычисляется, если стор обновился?

Дмитрий
18.02.2018
23:23:43
Если мы знаем, что ни один из его источников не обновлялся
Или у автора просто беспощадная мемоизация

kana
18.02.2018
23:28:06
предположим я инжекчу некий объект X
и имею проп Y
и делаю компутед Z = X[Y]
потом вызываю Z.F(), экшон котоый меняет поле в Z
ререндер будет? По сути наш источник - это только X, он изменился?

Дмитрий
18.02.2018
23:34:25
Ох, чёт загонистое

Сергей
18.02.2018
23:34:30
пока читал захотелось повеситься...

andretshurotshka?❄️кде
18.02.2018
23:37:48
а

Google

andretshurotshka?❄️кде
18.02.2018
23:38:07
это мобх?

kana
18.02.2018
23:38:22
да

andretshurotshka?❄️кде
19.02.2018
05:27:03
/pidorstats@SublimeBot

Sublime Bot
19.02.2018
05:27:03
Топ-10 пидоров за текущий год:
1. Ilia — 3 раз(а)
2. Dmitry_Kovbasa — 2 раз(а)
3. goodmind — 1 раз(а)
4. Adsumus — 1 раз(а)
5. jqueryisamonad — 1 раз(а)
6. defaultvoice — 1 раз(а)
7. kelin2025 — 1 раз(а)
8. tetris0k — 1 раз(а)
9. vlastachu — 1 раз(а)
10. reeei — 1 раз(а)
Всего участников — 20

andretshurotshka?❄️кде
19.02.2018
05:27:08
/pidor@SublimeBot

Sublime Bot
19.02.2018
05:27:08
Согласно моей информации, по результатам сегодняшнего розыгрыша пидор дня - ZeroBias!

illiatshurotshka❄️
19.02.2018
05:27:30

kana
19.02.2018
12:10:53

Сергей
19.02.2018
12:19:19
Выглядит странно

kana
19.02.2018
12:23:25
Выглядит странно
что именно?
isFetching - нода с двумя сеттерами и одним геттером значений этой ноды
comments - генерация бойлерплейта ноды (редьюсер и селекторы) для { ids, entities }, используя переданные экшоны (сеттеры) и селекторы.
merge - ну это просто reduce-reducers, слияние двух нод так, чтобы они работали над одним куском стейта
правильно было бы написать
const isFetching = createNode();
const commentsTable = createTable();
const commentsExtra = combineNodes({ isFetching });
export const comments = mergeNodes(
commentsTable,
commentsExtra
);
но .merge - небольшой хелпер для упрощения
массива элементов

Сергей
19.02.2018
12:30:32
А можешь кинуть Линк на кодакс?

Kelin
19.02.2018
12:31:11
А че это вообще

kana
19.02.2018
12:31:11
сейчас оформляю в виде пакета, либы ранее не выкладывал и хз как правильно их собирать
это все для редакса
https://www.npmjs.com/package/coredux

Сергей
19.02.2018
13:36:22
но чет я не въехал в проблематику

Google

Сергей
19.02.2018
13:36:40
что решает пакет?

illiatshurotshka❄️
19.02.2018
13:46:25

kana
19.02.2018
13:46:42

?
19.02.2018
13:53:56
Ридми напиши

Дмитрий
19.02.2018
14:08:20
Их тяжело писать


kana
19.02.2018
14:27:45
что решает пакет?
редьюсеры по сути представляют собой композируемые сеттеры. Если мы имеем некий редьюсер, который изменяет свой стейт по экшону, то мы можем этот редьюсер скомбайнить с другими в более сложный редьюсер и этот экшон все еще будет менять только тот нужный кусок стейта, где бы он не находился
то есть редьюсеры свободно комбинируются, им не нужно знать структуру стора и где они находятся относительно других редьюсеров
с другой стороны, если мы в одном модуле с редьюсерами объявляем селекторы, то они уже зависят от структуры и должны точно знать, где находятся редьюсеры в сторе
const getPostsIds = state => state.tables.posts.ids;
const getPostsEntities = state => state.tables.posts.entities;
const getPosts = createSelector(
getPostsIds,
getPostsEntities,
denormalize
);
В коде выше getPostsIds и getPostsEntities зависят от структуры стора и при перемещении редьюсеров в сторе нам придется их менять. Подход "базовые селекторы/сложные селекторы" выше помогает уменьшить количество правок, но не убрать.
Ну и собственно я решил, что это какая-то чушь, почему бы вместо write-only редьюсеров нам комбинировать сущности, дающие нам возможность и писать (редьюсеры), и читать (селекторы), линзы по сути. Такую сущность я временно назвал нодой. Имея две ноды со своими сеттерами и геттерами мы можем их скомбинировать в одну ноду со стейтом-объектом (как в combineReducers), которая будет иметь все сеттеры и геттеры обоих нод, причем гететры и сеттеры будут знать как добраться до именно нужных полей.
Сеттинг и геттинг происходит с помощью специальных объектов, экшоны (как и ранее) для записи и запросы (query) для чтения.
После этого мы можем такие модули комбинировать как угодно и селекторах не нужно будет явно указывать, в каком месте они находятся.
что решает пакет?
https://github.com/kana-sama/coredux-example/tree/master/src
Вот нормальный пример без всяких createTable, два популярных способа строить редьюсеры


Дмитрий
19.02.2018
14:29:40
Есть версия, что редаксовский способ вычисления стейта в принципе не совсем оптимальный

Ҫѐҏӗѫӑ
19.02.2018
14:29:54
+

kana
19.02.2018
14:29:54
ну вообще это мягко говоря так и есть)

Дмитрий
19.02.2018
14:30:31
И у мобикса тоже
Я просто кажется нашёл связь между редаксом и топологической сортировкой ациклического ориентированного графа, что сулит радикально более производительное и эффективное обновление стейта

kana
19.02.2018
14:37:18
сначала подумал, что сейчас будет что-то про топологии, гомотопии, гомологии

Дмитрий
19.02.2018
14:38:07
К счастью это всё же дискретка а не топология))

kana
19.02.2018
14:38:11
нужно вернуться к теории групп, чет я на неделю в редакс ушел

Max
19.02.2018
17:28:34
И у мобикса тоже
Интересно почему? - насколько я знаю в mobx используется самый оптимальный алгоритм. Mobx можно представить как 2д-редакс - из-за того что mobx observable-декоратором создает по redux-стору (обзервабл-объекту) на каждое после-ячейку состояния приложения то компоненты могут подписываться на эти ячейки независимо и будут обновляться только когда изменится та ячейка от которой они зависят и не будет такого как в редаксе - проход в цикле и вызов mapStateToProps на всех подключенных к общему стору компонентов. А для того чтобы не было лишних вычислений зависимых мемоизированных computed-декоратором функций тут как раз таки и может подойти топологическая сортировка по глубине при вызове подписчиков но только это не самый оптимальный алгоритм - есть более эффективный алгоритм которого я описал в этой статье https://habrahabr.ru/post/349022

Дмитрий
19.02.2018
17:44:14


Max
19.02.2018
17:55:37
Ну ок, тут я соглашусь - mobx действительно не эталон потому что автор раздул его до трех с половиной тысяч строчек кода в которых сложно разобраться и добавил кучу ненужны хелперов. То тем не менее алгоритм там реализован правильно, а разные хелперы можно и не использовать. А этот алгоритм, основную идею, реализацию и весь механизм обновлений mobx можно вместить в 85 строчек кода (и в той статье есть эта реализация) и легко понять как mobx работает

? animufag ?
19.02.2018
17:56:49
да он не про то что сорцы сложно читать

Google

? animufag ?
19.02.2018
17:56:56
кто вообще сорцы читает

Дмитрий
19.02.2018
17:57:26
Не, ну я уже и код из статьи чекнул

andretshurotshka?❄️кде
19.02.2018
18:32:19
опять мобикс

kana
19.02.2018
18:34:56
ну так винтаж довольно популярен

Alex
19.02.2018
18:35:14
почему никто не берет cyclejs? 100 строк кода ядра, остальное потоковые библиотеки (RxJs), простой VDOM не медленне чем react уж точно

andretshurotshka?❄️кде
19.02.2018
18:35:19

kana
19.02.2018
18:35:35
черная популярность

andretshurotshka?❄️кде
19.02.2018
18:35:54

Alex
19.02.2018
18:36:53
не обоснованно) что сложно там? фукнциональный код в принципе сложнее "дебажить" чем императив

kana
19.02.2018
18:37:23
как видишь...

andretshurotshka?❄️кде
19.02.2018
18:38:55
началось

Alex
19.02.2018
18:39:07
)

Дмитрий
19.02.2018
18:40:23
Еее

Kelin
19.02.2018
18:40:46
Здравствуйте, это чат по аниме?