AI가 생성사람이 개선

Riqli · 라이브 문서 · 지속적으로 업데이트

AI 지식과 인간의 실천이 만나는 곳.

친구와 공유
image

Разработка блога на Next.js и Sanity CMS с деплоем на Vercel ( next js блог, sanity cms блог, next js sanity настройка, next js статическая. Hard skill. (Next js блог. Sanity cms блог. Next js sanity настройка. Next js статическая генерация. Tutorial. Practice. Standard.)

섹션

Введение в курс и настройка окружения для разработки блога на Next.js и Sanity CMS

contents

В этом модуле мы заложим фундамент вашего будущего серверлесс-приложения. Вы узнаете, как инициализировать проект на Next.js, используя команду npx create-next-app, и настроить его для дальнейшей работы. Мы также установим React Bootstrap для создания стильного и адаптивного пользовательского интерфейса, чтобы сразу перейти к логике приложения, минуя рутинную верстку.

contents

Ключевой шаг этого раздела — освоение абсолютных путей к файлам. Мы создадим файл jsconfig.json и пропишем в нем базовый путь (baseUrl), что избавит вас от громоздких импортов вида ../../../components/Navbar. Это не только упростит код, но и сделает его гораздо более читаемым и легким в поддержке.

섹션

Интеграция Sanity Studio и создание схем данных для блога

contents

Мы переходим к сердцу нашего проекта — Sanity CMS. Вы узнаете, что такое headless CMS, и в чем ее принципиальное отличие от классических систем, таких как WordPress. Мы установим глобальный пакет @sanity/cli, инициализируем новое Sanity Studio и свяжем его с нашим Next.js-приложением через переменные окружения (.env.local).

contents

Практическая часть будет посвящена созданию схем данных (schemas) для наших документов: 'Блог' и 'Автор'. Вы научитесь определять различные типы полей: строки (string), слаг (slug), дату и время (datetime) и изображения (image). Мы также создадим связи между документами, добавив ссылку (reference) на автора в документе блога.

섹션

Наполнение данными и работа с API Sanity

contents

В этом разделе мы оживим наш проект. Вы создадите несколько тестовых блогов прямо в Sanity Studio, наполните их контентом, изображениями и укажете авторов. Затем мы настроим клиентскую часть для извлечения этих данных. Вы создадите Sanity Client, который будет использовать GROQ-запросы для получения списка всех блогов и их детальной информации по слагу.

contents

Мы реализуем генерацию статических страниц для каждого блога, используя функции Next.js getStaticProps и getStaticPaths. Это позволит создать высокопроизводительное приложение, где страницы формируются на этапе сборки, что идеально подходит для блогов. Вы увидите, как передавать данные из Sanity в ваши React-компоненты, создавая динамические, но при этом статически сгенерированные страницы.

contents

Мы научимся отображать портативный текст (Portable Text) из Sanity. Это мощный инструмент для создания структурированного текстового контента. Вы познакомитесь с пакетом @sanity/block-content-to-react, который позволит превратить JSON-данные из Sanity в полноценные React-компоненты. Отдельно мы настроим рендеринг кодовых блоков с подсветкой синтаксиса, используя библиотеку highlight.js.

섹션

Клиентская загрузка данных и пагинация с использованием SWR

contents

Мы реализуем клиентскую загрузку данных для пагинации, используя хук useSWR. Это позволяет эффективно кэшировать данные и обновлять их без перезагрузки страницы. Вы узнаете, как настроить API-маршруты Next.js для прокси-запросов к Sanity, обходя ограничения CORS.

contents

Создадим функцию-обертку useGetBlogs, которая использует useSWR для получения данных. Это централизованное решение упрощает работу с запросами, предоставляя состояние загрузки и ошибок. Мы также научимся передавать начальные данные (initialData) для мгновенного рендеринга страницы, избегая эффекта "моргания".

섹션

Реализация фильтрации и сортировки списка блогов

contents

Мы добавим фильтрацию для переключения между отображением в виде карточек и списка. Вы научитесь управлять состоянием интерфейса с помощью хука useState и создавать компонент фильтрации, который принимает колбэк для изменения вида. Также интегрируем иконки из библиотеки Font Awesome для улучшения UX.

contents

Реализуем сортировку блогов по дате с использованием оператора порядка (order) в GROQ-запросах. Вы узнаете разницу между сортировкой по полю date и встроенным полем _createdAt. Это позволит нам отображать сначала самые новые или самые старые записи, что критично для информационных ресурсов.

섹션

Расширенная пагинация и навигация по страницам блога

contents

Наша конечная цель — создать полнофункциональную пагинацию. Вы научитесь динамически загружать порции данных, используя оператор среза (slice) в GROQ. Это позволяет задавать смещение (offset) и ограничивать количество получаемых записей, что критично для производительности при большом количестве постов.

contents

Мы создадим компонент пагинации, который будет управлять параметрами запроса. Вы поймете, как синхронизировать состояние между компонентами, чтобы при клике на кнопку "Следующая" или "Предыдущая" страница обновлялась без перезагрузки. Это обеспечит плавный пользовательский опыт, характерный для современных SPA.

contents

Завершим этот раздел оптимизацией изображений с использованием image-url-builder от Sanity. Вы научитесь применять параметры crop и hotspot для интеллектуального кадрирования и управления позицией изображений в контенте, что значительно улучшит визуальное восприятие вашего блога.

섹션

Questions and answers


questions

Какой командой инициализируется новый проект Next.js для создания серверлесс-приложения, такого как блог?

answers정답

npx create-next-app

explanations

Именно эта команда является стандартным способом инициализировать проект на Next.js и создать его базовую структуру. Она загружает все необходимые зависимости и настраивает окружение для дальнейшей разработки, что позволяет сразу перейти к написанию кода, минуя ручную настройку.

answers오답

npm start next

answers오답

create-react-app next-blog


questions

Какая библиотека используется в курсе для создания стильного и адаптивного пользовательского интерфейса, чтобы ускорить разработку?

answers정답

React Bootstrap

explanations

Выбор пал на React Bootstrap, так как он предоставляет готовые, адаптивные компоненты. Это позволяет сосредоточиться на бизнес-логике приложения, а не на рутинной верстке, что критично для быстрой разработки серверлесс-решений.

answers오답

Material-UI

answers오답

Tailwind CSS


questions

Для чего в проекте создается файл jsconfig.json и прописывается baseUrl?

answers정답

Для настройки абсолютных путей к файлам, чтобы упростить импорты и сделать код более читаемым.

explanations

Настройка абсолютных путей избавляет от громоздких конструкций вида ../../../components/Navbar. Вместо этого можно писать components/Navbar, что значительно упрощает навигацию по проекту и его поддержку, особенно когда структура папок становится глубокой.

answers오답

Для конфигурации Webpack

answers오답

Для хранения переменных окружения


questions

Какое ключевое отличие headless CMS, такой как Sanity, от классических систем, например WordPress, подчеркивается в курсе?

answers정답

Headless CMS отделяет контент (бэкенд) от его представления (фронтенда), предоставляя данные через API.

explanations

В отличие от монолитных систем, headless CMS, как Sanity, не диктует, как контент должен отображаться. Она предоставляет гибкий API для доступа к данным, что позволяет разработчикам использовать любой стек технологий для фронтенда, например, Next.js, и создавать высокопроизводительные приложения.

answers오답

Headless CMS имеет встроенные шаблоны для отображения контента.

answers오답

Headless CMS не поддерживает мультимедийные файлы.


questions

Какой тип данных в Sanity используется для создания уникальных, человекопонятных URL-адресов для записей блога?

answers정답

slug

explanations

Тип slug в Sanity предназначен именно для этой цели. Он автоматически генерирует SEO-дружественные URL на основе заголовка, гарантируя их уникальность и читаемость, что критично для навигации и поисковой оптимизации блога.

answers오답

string

answers오답

url


questions

Какая функция Next.js используется для генерации статических страниц блога на этапе сборки, что идеально подходит для контентных сайтов?

answers정답

getStaticProps

explanations

Функция getStaticProps позволяет получить данные из Sanity во время сборки проекта и передать их в компонент страницы. Это обеспечивает генерацию статических страниц, которые загружаются мгновенно, что идеально для блогов и снижает нагрузку на сервер.

answers오답

getServerSideProps