Начните новый проект React
Если вы хотите создать новое приложение или веб-сайт полностью с использованием React, мы рекомендуем выбрать один из популярных в сообществе фреймворков, основанных на React.
Вы можете использовать React без фреймворка, однако мы обнаружили, что большинство приложений и сайтов в конечном итоге создают решения для общих проблем, таких как разбиение кода, маршрутизация, загрузка данных и генерация HTML. Эти проблемы характерны для всех библиотек пользовательского интерфейса, а не только для React.
Начав с фреймворка, вы сможете быстро начать работу с React и избежать необходимости создавать собственный фреймворк позже.
Подробный обзор
Можно ли использовать React без фреймворка?
Вы определённо можете использовать React без фреймворка — именно так вы бы использовали React для части вашей существующей страницы. Однако, если вы создаёте новое приложение или сайт полностью с React, мы рекомендуем использовать фреймворк.
Вот почему.
Даже если вам вначале не нужна маршрутизация или загрузка данных, вы, вероятно, захотите добавить некоторые библиотеки для них. По мере роста вашего JavaScript-пакета с каждой новой функцией, вам, возможно, придется разобраться, как разбить код для каждого маршрута по отдельности. По мере усложнения ваших потребностей в загрузке данных, вы, вероятно, столкнетесь с водопадами сетевых взаимодействий клиент-сервер, которые заставят ваше приложение работать очень медленно. По мере увеличения аудитории пользователей с плохим подключением к сети и устаревшими устройствами, вам может потребоваться генерировать HTML из ваших компонентов для отображения контента на ранней стадии — либо на сервере, либо во время сборки. Изменение вашей настройки для запуска части вашего кода на сервере или во время сборки может быть очень сложным.
Эти проблемы не специфичны для React. Вот почему у Svelte есть SvelteKit, у Vue — Nuxt и так далее. Чтобы самостоятельно решить эти проблемы, вам нужно будет интегрировать ваш сборщик с вашим маршрутизатором и с вашей библиотекой загрузки данных. Несложно создать начальную настройку, но существует множество нюансов, связанных с созданием приложения, которое загружается быстро даже по мере его роста. Вам нужно будет отправлять минимальный объём кода приложения, но делать это за один обмен между клиентом и сервером, параллельно с любыми необходимыми для страницы данными. Вероятно, вам потребуется, чтобы страница была интерактивной до того, как будет запущен ваш JavaScript-код, чтобы поддерживать поэтапное улучшение. Возможно, вы захотите сгенерировать папку с полными статическими HTML-файлами для ваших маркетинговых страниц, которые можно разместить где угодно, и они всё равно будут работать с отключённым JavaScript. Создание этих возможностей самостоятельно требует реальных усилий.
React-фреймворки на этой странице решают подобные проблемы по умолчанию, без дополнительных усилий с вашей стороны. Они позволяют начать с минимальными ресурсами и затем масштабировать ваше приложение в соответствии с вашими потребностями. Каждый React-фреймворк имеет сообщество, поэтому найти ответы на вопросы и обновить инструменты проще. Фреймворки также придают структуру вашему коду, помогая вам и другим сохранять контекст и навыки между различными проектами. И наоборот, с пользовательской настройкой проще застрять на недоступных версиях зависимостей, и вы по сути создадите свой собственный фреймворк — без сообщества или пути обновления (и, если он будет похож на те, которые мы делали в прошлом, он будет разработан более хаотично).
Если ваше приложение имеет необычные ограничения, которые плохо поддерживаются этими фреймворками, или вы предпочитаете самостоятельно решать эти проблемы, вы можете создать собственную пользовательскую настройку с React. Возьмите react и react-dom из npm, настройте свой собственный процесс сборки с помощью сборщика, такого как Vite или Parcel, и добавляйте другие инструменты по мере необходимости для маршрутизации, статической генерации или рендеринга на стороне сервера и многое другое.
Фреймворки React для производства
Эти фреймворки поддерживают все необходимые функции для развертывания и масштабирования вашего приложения в производстве и стремятся поддерживать нашу концепцию полнофункциональной архитектуры. Все рекомендуемые нами фреймворки с открытым исходным кодом с активными сообществами для поддержки и могут быть развернуты на вашем собственном сервере или у поставщика хостинга. Если вы автор фреймворка, заинтересованный в включении в этот список, дайте нам знать.
Next.js
Маршрутизатор страниц Next.js — это полнофункциональный фреймворк React. Он универсален и позволяет вам создавать приложения React любого размера — от в основном статического блога до сложного динамического приложения. Чтобы создать новый проект Next.js, выполните в вашей консоли:
Если вы новичок в Next.js, ознакомьтесь с курсом обучения Next.js.
Next.js поддерживается компанией Vercel. Вы можете развернуть приложение Next.js на любом хостинге Node.js или серверлесс-хостинге или на собственном сервере. Next.js также поддерживает статическую экспорте, которая не требует сервера.
Remix
Remix — это полнофункциональный React-фреймворк с вложенной маршрутизацией. Он позволяет разбивать ваше приложение на вложенные части, которые могут загружать данные параллельно и обновляться в ответ на действия пользователя. Чтобы создать новый проект Remix, выполните:
Если вы новичок в Remix, ознакомьтесь с руководством по Remix по созданию блога (короткий) и по созданию приложения (подробный).
Remix поддерживается компанией Shopify. При создании проекта Remix необходимо выбрать целевую среду развертывания. Вы можете развернуть приложение Remix на любом хостинге Node.js или серверлесс-хостинге, используя или написав адаптер.
Gatsby
Gatsby — это React-фреймворк для быстрого создания веб-сайтов на основе CMS. Богатый экосистемой плагинов и слоем данных GraphQL упрощает интеграцию контента, API и сервисов в один веб-сайт. Чтобы создать новый проект Gatsby, выполните:
Если вы новичок в Gatsby, ознакомьтесь с руководством по Gatsby.
Gatsby поддерживается компанией Netlify. Вы можете развернуть полностью статический сайт Gatsby на любом хостинге для статических сайтов. Если вы используете функции серверной части, убедитесь, что ваш хостинг-провайдер их поддерживает для Gatsby.
Expo (для нативных приложений)
Expo — это React-фреймворк, который позволяет создавать универсальные приложения для Android, iOS и веб-приложений с действительно нативными пользовательскими интерфейсами. Он предоставляет SDK для React Native, что упрощает использование нативных элементов. Чтобы создать новый проект Expo, выполните:
Если вы новичок в Expo, ознакомьтесь с руководством по Expo.
Expo поддерживается компанией Expo. Создание приложений с помощью Expo бесплатно, и вы можете отправлять их в магазины Google Play и App Store без ограничений. Expo также предоставляет платные облачные сервисы.
Передовые React-фреймворки
По мере того, как мы изучали, как продолжать улучшать React, мы поняли, что более тесная интеграция React с фреймворками (в частности, с маршрутизацией, сборкой и серверными технологиями) — это наша главная возможность помочь пользователям React создавать лучшие приложения. Команда Next.js согласилась сотрудничать с нами в исследовании, разработке, интеграции и тестировании таких независимых от фреймворков передовых функций React, как React Server Components.
Эти функции с каждым днём всё ближе к стадии готовности для производства, и мы вели переговоры с другими разработчиками сборщиков и фреймворков об их интеграции. Мы надеемся, что через год или два все фреймворки, перечисленные на этой странице, будут полностью поддерживать эти функции. (Если вы автор фреймворка, заинтересованный в сотрудничестве с нами для экспериментов с этими функциями, сообщите нам об этом!)
Next.js (App Router)
Маршрутизатор приложений Next.js — это переработка API Next.js, призванная воплотить в жизнь концепцию полнофункциональной архитектуры команды React. Он позволяет получать данные в асинхронных компонентах, которые работают на сервере или даже во время сборки.
Next.js поддерживается компанией Vercel. Вы можете развернуть приложение Next.js на любом хостинге Node.js или серверлесс-хостинге или на собственном сервере. Next.js также поддерживает статическую экспорте, которая не требует сервера.
Подробное изучение
Какие особенности составляют видение архитектуры React для полнотекстового приложения?
Бендер App Router в Next.js полностью реализует официальную спецификацию React Server Components. Это позволяет смешивать компоненты, создаваемые во время сборки, выполняемые только на сервере и интерактивные компоненты в едином дереве React.
Например, вы можете написать компонент React, выполняемый только на сервере, как функцию async, которая считывает данные из базы данных или файла. Затем вы можете передавать данные из него в свои интерактивные компоненты:
// This component runs *only* on the server (or during the build).
async function Talks({ confId }) {
// 1. You're on the server, so you can talk to your data layer. API endpoint not required.
const talks = await db.Talks.findAll({ confId });
// 2. Add any amount of rendering logic. It won't make your JavaScript bundle larger.
const videos = talks.map(talk => talk.video);
// 3. Pass the data down to the components that will run in the browser.
return <SearchableVideoList videos={videos} />;
}
App Router в Next.js также интегрирует получение данных с помощью Suspense. Это позволяет указать состояние загрузки (например, заполнитель скелета) для разных частей пользовательского интерфейса прямо в дереве React:
<Suspense fallback={<TalksLoading />}>
<Talks confId={conf.id} />
</Suspense>
Server Components и Suspense — это функции React, а не Next.js. Однако их принятие на уровне фреймворка требует согласия и непростой работы по реализации. В настоящее время App Router в Next.js является наиболее полной реализацией. Команда React работает с разработчиками бендеров, чтобы сделать эти функции более простыми в реализации в следующем поколении фреймворков.
© 2013–present Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://react.dev/learn/start-a-new-react-project