Андрей
Андрей
Хоть 1 страница.
Андрей
Андрей
Egor
Anonymous
все равно не понимаю ничего, надо что то прочесть наверное
Artem Kasapchuk
one-way ) Да просто иммутабельный объект в котором хранится весь стейт приложения и чистые фукнции доступа
Artem Kasapchuk
товарищи вы как заклинания читаете)
p
привет,
подскажите, как лучше в папку с билдом после вебпака ssl сертификат добавлять? плагин какой-то для копирования подключать или другой подход есть?
Artem Kasapchuk
Artem Kasapchuk
старый добрый паттерн Наблюдатель в более красивой обертки)
Artem Kasapchuk
я с Mobx не сталкивался, но мутабельный стейт хорош, когда он огромен, в противном случае с иммутабельным проще
Anonymous
кто то может подсказать про PREHEADER в письме? текст в нем идет на push, но он игнорирует пробелы в конце и сразу сует туда текст не находящийся в div для PREHEADER
Anonymous
типо такого вот говна и нужно чтобы кроме него ничего не было в пушах
Illia
\n пробовал?
Богдан
я с Mobx не сталкивался, но мутабельный стейт хорош, когда он огромен, в противном случае с иммутабельным проще
В mobx мутабельности столько же сколько и в redux-е. Просто из-за того что в редаксе один стор а в mobx-е сторов много, то может показаться что там все мутабельно. Но на самом деле то что выглядит мутабельным, например user.firstName = "..." является установкой нового значения целого стора - user.firstNameStore.set("...") точно так же как и в redux происходит установка нового значения которое вернули редюсеры после диспатча
Anonymous
Anonymous
@xbgnx можешь узнать у Roman Sharkov как там статья пишеться, ну про скорую кончину DOM-а и всерешающего васма и грядущей mais la révolution?)
Богдан
Советую почитать эту статью: https://hackernoon.com/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254
MobX использует граф состояний и вычисляет конечный финальный стейт только при необходимости (лениво) еще и мемиизируя его. Пока это не произошло ты именно мутируешь это дерево или скорее derivation stack.
в той статье описан видимо старый и не самый эффективный алгоритм Counting the number of ready / stale messages will ensure that, for example, computed value ‘4’ will only re-evaluate after computed value ‘3’ has become stable., сейчас mobx использует более эффективный способ вызова подписчиков, советую почитать эту статью https://habrahabr.ru/post/349022
А насчет мутаций то там происходит мутирование не дерева а значений сторов - то есть например стор const AppStore = {firstName: observable("vasya"), lastName: observable("pupkin")} аналогичен двум redux-сторам const AppStore = {firstName: createStore(...), lastName.createStore(...)} и когда в mobx мы как будто мутируем user.firstName = "..." то декоратор вызовет сеттер а тот сделает user.firstName.set(...) и этот мини-стор firstName установит новое значение стора точно так же как в варианте с редаксом установится новое значение firstName стора которое вернут редюсеры после вызова user.firstName.dispatch(...). То есть вся разница в том что в redux-е используется один стор и необходимость возвращать иммутебельное значение стора вынуждает пересоздавать вложенные объекты то в mobx несмотря на точно такую же необходимость возврата иммутабельного значения стора (потому что иначе он не поймет нужно ли вызывать подписчиков) но благодаря возможности создавать отдельный стор на каждую ячейку и поле в объекте не нужны такие манипуляции с пересозданием объектов в редюсерах и mapStateToProps потому что можно просто создать отдельный стор на каждое поле в глубоком объекте состояния и компоненты будут подписываться на каждое такое поле независимо от других полей
Anonymous
Нет, это ты пиаришь свою библиотеку bgnx/xmob на хабре, а на медиуме как раз объяснение как работает mobX от самих разработчиков, на эту статью даже FAQ официальной документации ссылается
Не вводи людей в заблуждение!
Konstantin
https://i.gyazo.com/b7f98fe42146f41fd98d8d459190e4bf.png
Konstantin
рисую два multiple-селекта
Konstantin
почему-то всегда выбран первый элемент
Konstantin
не могу победить
Konstantin
дико что в 21 веке есть такие проблемы)
Anonymous
Ты в своей библиотеке как раз таки используешь давно себя изжитый метод dirty-check, который например использовался в Angular 1.x, но в моследствии даже они от него отказались.
MobX работает не так!
Anonymous
Anonymous
еще раз повторю mobX использует структурное или обычное (shallow) сравнение, а не dirty check
https://github.com/mobxjs/mobx/blob/a867e87788a3aeb5d03a0a99f8379c13edd6be25/src/api/computed.ts#L75
Anonymous
Так, я смотрю повторяется наш недавний спор о Canvas-е и Skia. Помнишь чем все закончилось? Я если честно не вижу смысла с тобой спорить, как то надоело уже. Просто не вводи людей в заблуждение
Богдан
Так, я смотрю повторяется наш недавний спор о Canvas-е и Skia. Помнишь чем все закончилось? Я если честно не вижу смысла с тобой спорить, как то надоело уже. Просто не вводи людей в заблуждение
зачем съезжать - есть вопросы или аргументы - приводи. Никто не может знать все на свете. Вдруг я тоже ошибаюсь. Я пока пытаюсь объяснить что есть разные независимые части библиотеки - одна часть просто сравнит новое значение с текущим и как она будет делать неважно - либо строгое сравнение value !== newValue либо стуктурное shallowCompare(value, newValue) или вообще глубокое deepEqual(value, newValue) - неважно важно что после того как это сравнение произойдет нужно будет либо вызвать подписчиков (если несовпало) либо ничего не делать. А вот дальше уже есть вторая часть и сравнение этих самых алгоритмов вызова подписчиков. Первый вариант можно прямо в цикле вызвать this.subscribers.forEach(sub=>sub()) но очевидно что будут лишние перерасчеты для ромбовидных зависимостей. Дальше автор mobx-а в докладе приводит алгоритм dirty-clean который прежде чем вызвать подписчиков рекурсивно пометит их как diry а потом как clean и вызовет их в порядке сброса dirty до нуля и таким образом можно избежать лишних перерасчетов но не всех. Дальше есть еще как вриант алгоритм вызова подписчиков отсортировав их по глубине что будет эффективней но все равно будут лишние перерасчеты в некоторых ситуациях ну и есть последний правильный алгоритм который избежит всех лишних перерасчетов
Дима
Дима
Дима
Ты не читал пейпер что я скидывал недавно?
Дима
Лайфхак!
Dika
Anonymous
Anonymous
Дима
Нельзя полагаться на то, что мемоизация всего подряд будет эффективнее чем редкие тяжёлые пересчеты
Дима
Так как помимо O есть так же и понятия об отношениях объектов с gc
Дима
Zipper в общем случае — это курсор навигатор, в котором понятия перемещения по дереву являются первоочередными
Дима
Для него не существует прошлого состояния вообще
Дима
https://www.cs.tufts.edu/~nr/pubs/zipcfg.pdf
Дима
An Applicative Control-Flow Graph Based on Huet’s Zipper
Дима
При чтении держать в голове, что спустя 12 лет идеи изложенные здесь можно запускать в жс непосредственно) Подвёл только слегка устаревший диалект окамла
Дима
Там главное не пытаться понять то, что не понимается) Это нормально, что часть текста в пейперах не усваивается никак
Дима
В середине текста изложение идеи о том, к каким проблемам ведёт "ооп" подход к рассчёту обсерваблов и почему они выбрали аппликатив
Дима
То есть авторы то конечно пишут про компиляторы, но на данном уровне абстракции это вообще не важно)
Дима
Ближе к концу пейпера схематично описывают концепцию зиппера, бегающего по графу зависимостей не трогая стек
Дима
Ну точнее как схематично — я скомпилировал их код через баклскрипт в жс и благодаря чему осознал одну довольно клёвую штуку)
Дима
tl;tr: вместо того чтобы определять статус обновления всей ветви графа, достаточно тупо выделить левый, правый, верхний и нижний узел)
Anonymous
Дима
да
Anonymous
Вот еще одна статья от тех же авторов, только 2010го года:
https://www.cs.tufts.edu/~nr/pubs/hoopl10.pdf
Дима
Да да да)
Дима
И уже на хаскеле)
Дима
Я за время с этого диалога довольно много таких структур уже нашёл
Дима
Пока рациональнее всего выглядит идея замутить что-нибудь на Mealy machine
Дима
Дима
Это, как оказалось, огромное направление в computer sience
Дима
Более того, тут вообще оказывается рядом с мобиксом и редаксом в паре шагов нерешённые проблемы математики)
Zak
Всем даров) помогите нубу плез
Zak
Перечитал и не понял твоего сообщения
Zak
Спасибо)
Anonymous
Дима
Видел уже конечно)
Дима
У меня немного странная идея, но я убеждён, что описывать стейт как объект с полями нерационально
Anonymous