А как ваше решение отработает когда порядок респонсов от сервера будет не такой как порядок запросов? Есть предположение, что ни один обработчик не сработает
При этом, скажу сразу, что большая часть этой библиотеки уже устарела, и ее не стоит использовать. Именно ту часть, где идут манипуляции с DOM узлами, эту задачу мы будем максимально перекладывать на React.
Очень сильно утверждение.
Мне кажется вы до конца не разобрались в чем именно сила d3. Она не в наборе библиотечных функций для построения layout и т.п., а как раз в работе с DOM и динамическом обновлении данных. Данные — в данном случае это не просто точки, а некоторые сущности (следовало бы добавить для них id). И d3 через паттерн enter update exit позволяет оперировать разными состояниями этих сущностей. Можно отдельно анимировать появление новых сущностей, обновлять уже существующих и удалять устаревшие.
Попробуйте, например в ваш пример scatter plot (№3) добавить fadeIn, fadeOut для появления и удаления сущностей, а также анимирование перемещения существующих окружностей и вы поймете, что в реакте с этим туго.
Вообще как мне кажеться, идея «Виртуального дома» была успешно заимтвована из d3 selection
Вообще строго говоря mobx это про MVVM и в самом общем случае:
M — это данные (скорее всего с бэкенда) + логика (скорее всего сервисы),
VM — observable поля (состояния вью, обычно сторы)
V — понятно
Весь смысл MV* архитектур в том что букву M можно переиспользовать в дугих приложениях и в теории даже заменить react на angular, например. Другое дело, что на клиенте это скорее всего излишне и поэтому зачастую store = VM + M
Redux был построен на идее Free Monad. Если перевести на ООП терминологию то это паттерн Interpretator. Actions — это DSL, а reducers — это Интерпретатор. Основной смысли и преимущество в том, что уровень Actions(DSL) изолирован от того, как он должен интерпретироваться и в любой момент можно для него написать другой интерпретатор (более эффективный, либо с измененной логикой).
Вы же в Actions делаете связь с reducer, т.е. ваша абстракция начинает зависеть от реализации.
Я не говорю, что ваше решение плохое, но это уже не redux. Возникает тогда логичный вопрос, а зачем вам вообще тогда Actions?
Что такое store — это контейнер состояния. Основываясь на том как вы его используете, могу предложить вам перейти просто на классы.
Не в защиту bluebird, но состояние гонки можно легко получить и в асинхронной модели.
Многие забывают, что ответы могут приходить не в том же порядке, что и запросы
Запросы будут сделаны параллельно, а на выходе вы получите новый промис к-ый разрезолвится после того как придут ответы от всех промисов и будет содержать массив их ответов
Как я понял там для этого есть
component.update
аналог реактовскогоforceUpdate
Все смешалось люди, кони.
Особенно понравилась логическая цепочка: появление хуков сделало реакт более понятным, поэтому кол-во вопросов на SO возросло )
Заворачивайте в декораторы и не парьтесь
А как ваше решение отработает когда порядок респонсов от сервера будет не такой как порядок запросов? Есть предположение, что ни один обработчик не сработает
Есть такая вещь как easymotion и подобные, позволяют довольно удобно навигироваться по коду без мышки.
Очень сильно утверждение.
Мне кажется вы до конца не разобрались в чем именно сила d3. Она не в наборе библиотечных функций для построения layout и т.п., а как раз в работе с DOM и динамическом обновлении данных. Данные — в данном случае это не просто точки, а некоторые сущности (следовало бы добавить для них id). И d3 через паттерн enter update exit позволяет оперировать разными состояниями этих сущностей. Можно отдельно анимировать появление новых сущностей, обновлять уже существующих и удалять устаревшие.
Попробуйте, например в ваш пример scatter plot (№3) добавить fadeIn, fadeOut для появления и удаления сущностей, а также анимирование перемещения существующих окружностей и вы поймете, что в реакте с этим туго.
Вообще как мне кажеться, идея «Виртуального дома» была успешно заимтвована из d3 selection
M — это данные (скорее всего с бэкенда) + логика (скорее всего сервисы),
VM — observable поля (состояния вью, обычно сторы)
V — понятно
Весь смысл MV* архитектур в том что букву M можно переиспользовать в дугих приложениях и в теории даже заменить react на angular, например. Другое дело, что на клиенте это скорее всего излишне и поэтому зачастую store = VM + M
А как вы тестировали ваше angular приложения с импортами и вместо DI?
Имхо, вся фишка mobx как раз в том, что уведомления синхронно происходят. Если хочется по дефолту асинхронно, то лучше тогда уже использовать rxjs
Это какой-то прикол? )
Мне кажется вы забыли о видео лекциях
Пул объектов пробовали использовать?
К слову сказать
Object.keys
не сохраняет порядок ключейВы же в Actions делаете связь с reducer, т.е. ваша абстракция начинает зависеть от реализации.
Я не говорю, что ваше решение плохое, но это уже не redux. Возникает тогда логичный вопрос, а зачем вам вообще тогда Actions?
Что такое store — это контейнер состояния. Основываясь на том как вы его используете, могу предложить вам перейти просто на классы.
Многие забывают, что ответы могут приходить не в том же порядке, что и запросы