Pull to refresh

Comments 39

Так, hyperapp для серьезных приложений же не подходит, или цель статьи в другом? Насколько я помню, даже автор либы не определился как сделать стейт в hyper app глобальным. Потому, что только рут компонент обладает состоянием, а все его дети только припасами.

То, что только рут компонент является "умным", а все дочерние "глупыми" — нормально. Многие и на React/Redux так пишут

На все приложение один контейнер? Звучит сложновато.

Может и сложновато, зато единообразно во всех приложениях всегда. Для кого-то это будет плюсом

Redux — это ведь не только про стор (хранение данных). Его dev-tools сильно облегчают разработку, банальная для redux возможность экспортировать и импортировать стор чего только стоит. В случае ванильного this.setState() эту возможность придется реализовывать.

Это первое, что пришло в голову.

Очень однобокое получилось голосование. Кроме вариантов "за redux" и "за hyperapp" есть куча других, начиная от ванильного this.setState(), и заканчивая другими библиотеками, типа mobx или unstated.

UFO just landed and posted this here
А по-моему, не очень. Потому что в нем потеряли статическую типизацию и синтаксис классов…
Второе решаемо. Может у меня дойдут руки оформить в либу набор декораторов для этого. Статическая типизация — это о чем?
Идея интересная, но пока сыровато.
Насколько mobx уменьшает боль? Я читал и смотрел презентации от яндекса, но на сайте mobx пугают говорится, что это библиотека, а не фреймворк, и что это не замена редаксу. Слышал, что нужен mobx-state-tree.
Какой набор аддонов к mobx нужно добавить, чтобы заменить стандартные миддлверы редакса? (да, идея redux-thunk, вроде как из коробки работает в mobx)
Это как раз-таки замена редаксу. А какие миддлверы вам тут нужны? А то я от redux убежал едва увидев примеры, и про стандартные мидлверы ничего не знаю (и, наверное, я тут не один такой).
А зачем вам идея идея redux-thunk в mobx?

В mobx вы просто меняете объекты как обычно в JS и не паритесь на счет остального. В этом главная фишка. Можно вообще не использовать action, если у вас что-то простое, но в то же время action-ом может быть любая JS функция или метод любого «левого» класса. Т.е. даже банальный $.get('/url', () => {store.object.title = 'some value';}) будет работать на-ура.

Я на mobx с редукса сбежал просто неглядя. Сейчас redux кажется мне адовой смесью бредовых идей его автора (без обид).
По сравнению с классическим redux cильно уменьшает. Правда, появляется соблазн пихать всю логику прямо в сторы. На мелких проектах так норм, а на крупных без выделение отдельного бизнес-слоя скоро начинается треш.
Однозначно не хватает варианта «против всех»
Интересно где у этого фреймворка mapStateToProps или хотя бы возможность сделать вложенные actions? На приложениях вроде счетчика или тодошек все фреймворки выглядят сносно но вот ближе к реальности начинаются ограничения и костыли. В данном случае допустим мы хотим добавить фичу вложенных тодошек, чтобы юзер мог разбить большую подзадачу на мелкие а те в свою очередь на более мелкие и не нужно ограничивать юзера в количестве уровней. Как эта задача решается в hyperapp? Если идти по пути вложенности (хранить в объекте todo массив вложенных тодошек) то как обновить текст какой-то тодошки на n-уровне вложенности? Нам нужно вернуть новый объект состояния и нужно как-то рекурсивно пересоздать объекты и массивы всех родителей и неясно как это решается hyperapp. А если идти по пути нормализации, когда в тодошке храним не объекты а айдишники а сами объекты в плоском хеше объектов по их айдишнику то нужно добавить аналог mapStateToProps чтобы изменения одной тодошки не вызвало перерендер всего списка тодошек или вообще всего приложения
UFO just landed and posted this here
UFO just landed and posted this here

Как-то так:


const actions = {
  upLater: value => (state, actions) => {
    setTimeout(actions.up, 1000, value)
  },
  // Called one second after upLater
  up: value => state => ({ count: state.count + value })
}

P.S. — добавил пример в текст статьи

UFO just landed and posted this here
  1. Интерфейс дергает upLater
  2. upLater ждет секунду и дергает up
  3. up меняет state
  4. Интерфейс обновляется
UFO just landed and posted this here

По-идее — в объекте actions будут лежать обертки, которые не требуют ручной передачи state

Да, вызывается этот метод вот так:


            actions[key] = function(data) {
              if (typeof (data = action(data)) === "function") {
                data = data(get(path, globalState), actions)
              }

Код, конечно, написан в жанре ребуса, но что происходит раскопать нетрудно. Если функция-метод в объекте actions вернула функцию — то эта вторая функция вызывается с двумя параметрами, причем второй — это уже измененный объект actions.

UFO just landed and posted this here

После вызова actions.up — это вообще как? actions.up как бы вызывается через секунду после того как upLater закончил работу.

Как я понял, они пытались сделать клон Cerebral (который, кстати, уже юзают в продакшне весьма крупные проекты, типа CodeSandbox).
Не нашел плюсов кроме «это у нас из коробки, это тут тоже автоматом и это из коробки». Если добавилась только изкоробочность, почему просто не сделать надстройку над R/R?

Да и придирки к бойлерплейту какие-то… Странные. Ну как вам не написать / взять один раз сделать вес обвес автоматикой и дальше просто писать чистые редьюсеры в стиле const handleAction = (state, {data}) => newState?

Хочу обратить внимание, что я не автор. А это перевод.
Но с React/Redux работаю давно. И архитектура React не позволит некоторые "упрощения" hyperapp реализовать. Например, автоматический биндинг action creators сделать не получится без каких-то серьезных проломов и глобальных переменных. Максимум, что-то похожее можно отыскать тут redux-actions.
А в остальном вы правы, что-то похожее можно и на React/Redux изобразить, если приложить усилий. Думаю, в hyperapp упор именно на "изкоробочность".

Гляньте плз на такое решение (обертку над R/R) Redaction
Код скажет больше, чем тысяча слов*

Ну вот, на первом же примере обломался. Смотришь картинку, и видишь, что вариант Хайпераппа точь также делаешь на Реакте без Редакса.

Дальше читать перехотелось.

*В данном случае код говорит о том, что тебе лапшу на уши вешают.
Мне тоже больше напомнило обычный React + recompose
И как обычно: а что это за тема и шрифт? ((((-:
Sign up to leave a comment.