На протяжении многих лет я работал над несколькими проектами SPA с разными фреймворками React. В большинстве случаев мои проекты начинались с одного из шаблонов, созданных многими замечательными разработчиками по всему миру, или приложения create-react-app и добавляли все необходимые инструменты поверх. В моем последнем проекте я начал изучать более простой подход к созданию одностраничного приложения (SPA) с рендерингом на стороне сервера (SSR). Я наткнулся на Next.js, простой пакет для создания SPA с SSR, и material-ui, блестящую реализацию Google Material Design в React.
В этом руководстве я покажу вам, как создать очень простое приложение для блога с использованием вышеупомянутых технологий. Код, упомянутый в этой статье, доступен по адресу https://github.com/aduyng/blog-spa.
Прежде чем мы начнем, ознакомьтесь со следующими ссылками:
Создайте новый проект и установите начальные зависимости для веб-приложения.
Создайте новую папку и простой package.json
Отредактируйте ./web/package.json
, чтобы включить сценарии npm:
Создание домашней страницы
В Next.js каждый файл в ./web/pages
является маршрутом. Создайте ./web/pages/index.js
и добавьте следующий фрагмент:
Запустите приложение и откройте его в браузере, используя команды, указанные ниже в разделе ./web
. Вы должны увидеть содержимое выше по адресу http: // localhost: 3000.
npm run dev
Добавление библиотек material-ui
На терминале в ./web
folder введите следующую команду, чтобы добавить @material-ui/core
и @material-ui/icons
npm install --save @material-ui/core @material-ui/icons
Нам нужно перезаписать ./web/pages/_app.js
в Next.js по умолчанию, чтобы включить в него шрифт Roboto из шрифта Google:
Запустите приложение сейчас, и вы должны увидеть, как в браузере загружаются шрифты в стиле material-ui и Roboto.
Измените наш ./web/pages/index.js
, чтобы включить кнопки из material-ui:
Снова запустите npm run dev
и проверьте, как мы продвигаемся:
Красиво, а!
Рендеринг некоторых постов
Давайте внесем изменения в наш ./web/pages/index.js
, чтобы отображать некоторые сообщения:
Теперь проверяем прогресс в браузере:
Довольно просто, правда?
Давайте сделаем магию рендеринга на стороне сервера
Функция getInitialProps
выполняется на стороне сервера. В этом случае нам нужно получить список сообщений с https://jsonplaceholder.typicode.com/posts или с любой другой вашей конечной точки.
Но сначала давайте установим isomorphic-fetch
Затем измените наш ./web/pages/index.js
на следующий:
Проверьте приложение в браузере:
Если вы проверите источник страницы прямо сейчас, будет возвращено намного больше контента по сравнению с предыдущей версией. Это потому, что в ответ теперь включена вся разметка, созданная на стороне сервера.
Реализуйте ссылку «Продолжить чтение ..».
Как видите, мы используем пакет next/link
, чтобы связать «Продолжить чтение…» с /post/?postId=${post.id}
. Давайте реализуем эту страницу.
Мы создадим новую страницу в ./web/pages/post.js
, которая будет извлекать сведения о публикации и отображать их для пользователя.
Проверьте страницу сообщения:
Заключение
С помощью набора простых шагов мы можем создать простое, но мощное приложение для блога с прочной основой. Отсюда вы можете выполнить сборку с npm run build
, развернуть приложение на своей любимой платформе NodeJS и запустить его с npm start
.
Также очень легко добавить дополнительные страницы или элементы пользовательского интерфейса благодаря очень обширной документации по material-ui на https://material-ui.com (спасибо вам). С помощью этой библиотеки можно без особых усилий создать красивый СПА.
Наслаждаться!