Внезапно Роутер на промиспайпах получается очень ничего
https://github.com/edjafarov/PromisePipe/tree/master/example/PPRouter
PPRouter.use(ExpressAppAdapter(app));
or
PPRouter.use(HistoryApiAdapter);
PPRouter(function(PPRouter){
PPRouter('/posts', function(PPRouter){
PPRouter('/:id’).component(comp3).then(doAction5).then(doAction6)
}).component(comp2).then(doAction3).then(doAction4)
}).component(comp1).then(doAction1).then(doAction2)
comp1,comp2,comp3 - не обязательно должны быть РеактКомпонентами
Это просто функции, при рендере которые получают объект в качестве аргумента такого вида
{
params: // параметры из урла,
queryParam://квери параметры
mask://маска урла
data://результат своего промиспайпа (для комп1 это будет результат .then(doAction1).then(doAction2) итд)
children://это результат нестед компонента
}
тоесть подефолту туда можно вставлять реакт компоненты
а можно и просто функции которые используют этот апи и рендерят из любого темплейта или строки
Адаптеры - адаптируют работу роутера к энвайроменту. Адаптер вешает свои хендлеры на окружение и дергает роутер если нужно при изменение роута адаптер меняет окружение(например строку браузера)
из адаптеров которые приходят в голову:
@edjafarov пиши примеры на es6 и
async .. await
может получиться весьма недурно
ПромисПайп он вообще больше похож на реактивные стримы, потому с асинк авейтом скорее несовместимы, разве я что не понимаю
2) у роутержс есть метод handleUrl который я использую, он возвращает промис - и это круто, но через него нельзя передать контекст, и это отстой :(, в простых случаях это не нужно, но для тру изоморфности нужно иметь возможность выполнять хендлеры в разных контекстах
похоже мне удалось побороть эту проблему, немного вычурно, но вся хрень спрятана под капотом, так что ок.