Стартовый кит для создания сервиса на платформе VK Mini Apps.
Чтобы понимать, что здесь происходит вы должны знать что такое VK Mini Apps, ReactJS и React Redux.
git clone git://github.com/iSa1vatore/vk-mini-app-boilerplate.git <folder name>
Перейдите в созданную папку и выполните команды: npm install
и npm start
, последняя запустит сервер для разработки на localhost:10888
Отлично, теперь перед нами демонстративное приложение, можно править код и все изменения сразу будут видны на нашем сервере при помощи "Hot Reloading".
- Поддержка темы нативного клиента
- Поддержка iOS swipe back для панелей
- Обработка хардверной кнопки "назад" для Android
- Сохранение позиции скролла для панелей и элементов
- Scroll To Top при нажатии на иконку в Epic`e
- Получение токена пользователя
- Запросы к API ВКонтакте
- Сохранение данных в форме при смене панели
- Роутер
Действия которые роутер может выполнить:
setStory(story, initial_panel)
- Устанавливает активную Story у Epic'a, View и активную панель.setPage(view, panel)
- Устанавливает активный View и PanelgoBack(from)
- Совершает действие назад, будь то закрытие модального окна, переход на прошлую панель, закрытие попапа и т.п;openPopout(popout)
- Открывает поппап.closePopout()
- Закрывает поппап.openModal(id)
- Открывает модальную страницу по её ID.closeModal()
- Закрывает модальную страницу или открывает прошлую страницу.
Примеры того как это все работает смотрите в исходниках ¯_(ツ)_/¯, там все просто.
Для сохранения позиции горизонтального скоролла нужно:
- Указать ID для элемента HorizontalScroll
<HorizontalScroll id="EXAMPLE_TABS_LIST">
...
</HorizontalScroll>
- Сохранить позицию при демонтировании
componentWillUnmount() {
const {setScrollPositionByID} = this.props;
setScrollPositionByID("EXAMPLE_TABS_LIST");
}
- Восстановить позицию при монтировании
componentDidMount() {
restoreScrollPosition();
}
Пример находится в файле: /src/js/panels/more/base.js
В файле index.js на 24 стороке указывается стартовая панель приложения:
store.dispatch(setStory('home', 'base'));
В данном случае это значит, что приложение запустится с:
activeStory: home
activeView: home
activePanel: base
Как вы поняли значение ID у Root и стартового View должны совпадать.
В проекте есть 2 файла: "App" и "AppWithoutEpic", первый идет с навигационной панелью Epic, второй без, он подойдет для простых приложений.
import App from './App';
По умолчанию для примера выбран вариант с Epic навигацией.
В файле по пути /src/js/services/VK.js
нужно заменить значение константы APP_ID
на ID вашего приложения
Демо: vk.com/app6984089
Мой VK (вопросы, предложения): Ivan Salvatore