Как стать автором
Обновить

Комментарии 39

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь
А по-моему, не очень. Потому что в нем потеряли статическую типизацию и синтаксис классов…
Второе решаемо. Может у меня дойдут руки оформить в либу набор декораторов для этого. Статическая типизация — это о чем?
Идея интересная, но пока сыровато.
Насколько 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 чтобы изменения одной тодошки не вызвало перерендер всего списка тодошек или вообще всего приложения
НЛО прилетело и опубликовало эту надпись здесь

Fixed

НЛО прилетело и опубликовало эту надпись здесь

Как-то так:


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. — добавил пример в текст статьи

НЛО прилетело и опубликовало эту надпись здесь
  1. Интерфейс дергает upLater
  2. upLater ждет секунду и дергает up
  3. up меняет state
  4. Интерфейс обновляется
НЛО прилетело и опубликовало эту надпись здесь

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

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


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

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

НЛО прилетело и опубликовало эту надпись здесь

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

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

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

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

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

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

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

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