7.11.0 • Published 9 months ago

@blumjs/router v7.11.0

Weekly downloads
-
License
ISC
Repository
-
Last release
9 months ago

Описание

Библиотека основана на effector и window.history.state без изменения url и hash. Создана для роутинга vk-mini-apps, также поддерживает PWA. Рекомендуется использовать с @blumjs/cli.

Использование

Инициализация

Чтобы обработать браузерную кнопку назад, нужно проинициализровать роутер:

import { useInitRouter } from '@blumjs/router';

const App = () => {
  useInitRouter({
    view: "Main",
    panel: "Home",
    modal: null,
    popout: null
  });

  ...
}

Чтобы поймать кнопку назад, используйте middlewares:

import {
  useInitRouter,
  createCatchBackBrowserRouteMiddleware,
  createDisableBackBrowserRouteMiddleware,
  createRouteMiddleware,
  blumRouter
} from '@blumjs/router';

const App = () => {
  useInitRouter({
      view: "Main",
      panel: "Home",
      modal: null,
      popout: null
    },
    //первый аргумент - название роута; второй callback, который вызовется при срабатывании браузерной кнопки назад
    createCatchBackBrowserRouteMiddleware('Alert', (storeRoutes, prevRoutes) => back());

    //такая же как createCatchBackBrowserRouteMiddleware, но автоматически предотвращает изменение роутеров
    createDisableBackBrowserRouteMiddleware('Loading', (storeRoutes, prevRoutes) => console.log('loading, please wait...')),

    //кастомный middleware
    createRouteMiddleware((storeRoutes, prevRoutes) => {
      if(navigator.onLine){

        //middleware пройден
        return true;
      }
      blumRouter.historyPush({view: 'ConnectionError', panel: 'Offline', modal: null, popout: null});
      return false;
    })
  );

  ...
}

Routes: get

Чтобы получить роутеры и проверить инициализацию:

import { useRouter } from '@blumjs/router';

const App = () => {
  const { activeView, activePanel, activeModal, activePopout, isRouteInit } = useRouter();

  ...
}

Routes: set

Чтобы поставить роутер, используйте функции: setActiveView, setActivePanel, setActiveModal, setActivePopout.

import { setActiveViewPanel, setActivePanel, setActiveModal, setActivePopout } from '@blumjs/router';

setActiveViewPanel({view: 'Main', panel: 'Home'});
setActivePanel('Home');
setActiveModal('Notifications');
setActivePopout('Loading');

Чтобы вернуться на предыдущую страницу:

import { back } from '@blumjs/router';

//если вы хотите, чтобы роутеры менялись до прогонки middlewares:
back({
  isDispatchChangeStateEventBeforeMiddleware: true,
  isDispatchChangeStateEventAfterMiddleware: false
});

//back - асинхронная функция и ее нельзя дождаться с помощью await и then. Используйте опции beforeBackHandledCallback (срабатывает после window.history.back и перед middlewares) и afterBackHandledCallback (срабатывает при успешном или провальном обходе middlewares)
back({
  beforeBackHandledCallback: (storeRoutes, prevRoutes) => {
    console.log("I triggered before middlewares")
  },
  afterBackHandledCallback: (storeRoutes, prevRoutes) => {
    console.log("I triggered after middlewares")
  }
});

//значения по умолчанию: isDispatchChangeStateEventBeforeMiddleware = false, isDispatchChangeStateEventAfterMiddleware = true, и callbacks = null
back();

Если вам нужно выключить модалку или popout на новой странице (например, offline страница, где пользователь не должен видеть модалку и popout) вы можете использовать _setActiveModal, _setActivePopout. В других случаях лучше использовать функцию back.

import { _setActiveModal, _setActivePopout } from '@blumjs/router';

_setActiveModal(null);
_setActivePopout(null);
7.11.0

9 months ago

7.10.0

10 months ago

7.9.4

11 months ago

7.9.3

1 year ago

7.9.2

1 year ago

7.9.1

1 year ago

7.9.0

1 year ago

7.8.0

1 year ago

7.7.0

1 year ago

7.6.0

1 year ago

7.5.0

1 year ago

7.4.0

1 year ago

7.3.0

1 year ago

7.2.1

1 year ago

7.2.0

1 year ago

7.1.0

1 year ago

7.0.0

1 year ago

6.12.0

1 year ago

6.11.0

1 year ago

6.10.0

1 year ago

6.9.0

1 year ago

6.8.0

1 year ago

6.7.0

1 year ago

6.6.0

1 year ago

6.5.0

1 year ago

6.4.0

1 year ago

6.3.1

1 year ago

6.3.0

1 year ago

6.2.1

1 year ago

6.2.0

1 year ago

6.1.0

1 year ago

6.0.5

1 year ago

6.0.4

1 year ago

6.0.3

1 year ago

6.0.2

1 year ago

6.0.1

1 year ago

6.0.0

1 year ago

5.1.0

1 year ago

5.0.1

1 year ago

5.0.0

1 year ago

4.0.0

1 year ago

3.1.4

1 year ago

3.1.3

1 year ago

3.1.2

1 year ago

3.1.1

1 year ago

3.1.0

1 year ago

3.0.3

1 year ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.0

1 year ago

2.0.2

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.1.2

1 year ago

1.1.0

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago