Комментарии 39
Так, hyperapp для серьезных приложений же не подходит, или цель статьи в другом? Насколько я помню, даже автор либы не определился как сделать стейт в hyper app глобальным. Потому, что только рут компонент обладает состоянием, а все его дети только припасами.
То, что только рут компонент является "умным", а все дочерние "глупыми" — нормально. Многие и на React/Redux так пишут
На все приложение один контейнер? Звучит сложновато.
Какой набор аддонов к mobx нужно добавить, чтобы заменить стандартные миддлверы редакса? (да, идея redux-thunk, вроде как из коробки работает в mobx)
В mobx вы просто меняете объекты как обычно в JS и не паритесь на счет остального. В этом главная фишка. Можно вообще не использовать action, если у вас что-то простое, но в то же время action-ом может быть любая JS функция или метод любого «левого» класса. Т.е. даже банальный $.get('/url', () => {store.object.title = 'some value';}) будет работать на-ура.
Я на mobx с редукса сбежал просто неглядя. Сейчас redux кажется мне адовой смесью бредовых идей его автора (без обид).
Как-то так:
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. — добавил пример в текст статьи
- Интерфейс дергает
upLater
upLater
ждет секунду и дергаетup
up
меняет state- Интерфейс обновляется
По-идее — в объекте actions будут лежать обертки, которые не требуют ручной передачи state
Да, вызывается этот метод вот так:
actions[key] = function(data) {
if (typeof (data = action(data)) === "function") {
data = data(get(path, globalState), actions)
}
Код, конечно, написан в жанре ребуса, но что происходит раскопать нетрудно. Если функция-метод в объекте actions вернула функцию — то эта вторая функция вызывается с двумя параметрами, причем второй — это уже измененный объект actions.
Да и придирки к бойлерплейту какие-то… Странные. Ну как вам не написать / взять один раз сделать вес обвес автоматикой и дальше просто писать чистые редьюсеры в стиле const handleAction = (state, {data}) => newState?
Хочу обратить внимание, что я не автор. А это перевод.
Но с React/Redux работаю давно. И архитектура React не позволит некоторые "упрощения" hyperapp реализовать. Например, автоматический биндинг action creators сделать не получится без каких-то серьезных проломов и глобальных переменных. Максимум, что-то похожее можно отыскать тут redux-actions.
А в остальном вы правы, что-то похожее можно и на React/Redux изобразить, если приложить усилий. Думаю, в hyperapp упор именно на "изкоробочность".
Код скажет больше, чем тысяча слов*
Ну вот, на первом же примере обломался. Смотришь картинку, и видишь, что вариант Хайпераппа точь также делаешь на Реакте без Редакса.
Дальше читать перехотелось.
*В данном случае код говорит о том, что тебе лапшу на уши вешают.
Hyperapp для беженцев с React/Redux