Вите + Реакт с нуля, с ранним включением React Compiler
Создайте среду разработки с Vite, прочитайте файл entrypoint и включите React Compiler до того, как будет реализована первая функциональность.
Изначальная концепция React заключалась в предсказуемом интерфейсе при изменении данных. Современный стандарттный подход — использование Vite для быстрой обратной связи локально, а при необходимости — React Compiler для автоматизации процесса мемоизации, который раньше выполнялся вручную.
Что мы используем (и что пропускаем)
В качестве основы — Vite + React + TypeScript. CRA не используется. React Compiler включен намеренно, чтобы вы смогли увидеть его эффект уже в первых компонентах.
Предварительные требования: Node.js
Установите актуальную версию Node LTS, убедитесь, что команды node и npm (или pnpm) находятся в PATH, затем создайте структуру проекта:
// The old way — you manually keep the screen in sync every time the data changes
const badge = document.querySelector('#unread-badge');
badge.textContent = count;
if (count === 0) {
badge.style.display = 'none';
} else {
badge.style.display = 'block';
}
Структура папок
Узнайте, где находятся файлы index.html, src/main.tsx и App, прежде чем менять инструменты разработки:
// The React way — you simply declare "for this state, the screen looks like this"
function UnreadBadge({ count }: { count: number }) {
if (count === 0) return null;
return <span className="badge">{count}</span>;
}
Разбор точки входа
В точке входа загружается корневой элемент интерфейса и подгружается глобальный CSS. Пусть всё остаётся простым; логика функций должна находиться в компонентах.
node -v
corepack enable
Включить React Compiler
Добавьте плагин компилятора в настройки сборки, чтобы интеграция Babel/SWC соответствовала документации для вашей версии Vite:
npm install -g pnpm
pnpm create vite@latest restart-react --template react-ts
Подтвердить активность
Используйте описанные способы проверки или небольшой компонент, который в противном случае потребовал бы использования useMemo/memo, и проверьте результаты работы компилятора или индикаторы инструментов:
cd restart-react
pnpm install
pnpm dev
restart-react/
├── index.html ← the single HTML file the app mounts into
├── package.json ← dependencies and scripts
├── tsconfig.json ← TypeScript config
├── vite.config.ts ← Vite config (we'll edit this shortly)
└── src/
├── main.tsx ← the app's entry point
├── App.tsx ← the top-level component
├── App.css
└── index.css
Первая функциональность без конфликтов с инструментами
// src/main.tsx
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)
pnpm install -D babel-plugin-react-compiler@latest @rolldown/plugin-babel
Итоги
// vite.config.ts (before)
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
});
// vite.config.ts (after)
import { defineConfig } from 'vite';
import react, { reactCompilerPreset } from '@vitejs/plugin-react';
import babel from '@rolldown/plugin-babel';
export default defineConfig({
plugins: [
react(),
babel({
presets: [reactCompilerPreset()],
}),
],
});
Теперь у вас есть приложение Vite React с поддержкой компилятора, встроенной с самого начала — идеально для проектов, где предполагается автоматическая мемоизация, а не её добавление позже. Сохраняйте тесты в рабочем состоянии, измеряйте каждый этап отдельно и не выпускайте продукт, опираясь только на интуицию, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте тесты в рабочем состоянии, измеряйте каждый этап отдельно и не выпускайте продукт, опираясь только на интуицию, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте тесты в рабочем состоянии, измеряйте каждый этап отдельно и не выпускайте продукт, опираясь только на интуицию, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте тесты в рабочем состоянии, измеряйте каждый этап отдельно и не выпускайте продукт, опираясь только на интуицию, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте тесты в рабочем состоянии, измеряйте e
Сохраняйте устройства в рабочем состоянии, измеряйте каждый этап отдельно и не соглашайтесь на выпуск продукта, основываясь только на предположениях, если в следующей версии может снова возникнуть тот же скрытый сбой под новым названием.Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этап отдельно и не соглашайтесь на выпуск продукта, основываясь исключительно на интуиции, если в следующей версии может снова появиться тот же самый скрытый модус отказа под новым названием.Сохраняйте устройства в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь только на интуиции, если в следующей версии может снова появиться тот же самый скрытый сбой под новым названием.Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь только на интуиции, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь только на интуиции, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь только на интуиции, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь только на интуиции, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь только на интуиции, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием. Сохраняйте фиксатуры в рабочем состоянии, измеряйте каждый этапСохраняйте устройства в рабочем состоянии, измеряйте каждый этап отдельно и не соглашайтесь на выпуск продукта, основываясь исключительно на интуиции, если в следующей версии может снова возникнуть тот же самый скрытый сбой под новым названием.Сохраняйте тестовые среды в рабочем состоянии, измеряйте каждый этап отдельно и откажитесь от выпуска продукта, основываясь только на интуиции, если в следующей версии можно снова ввести ту же самую скрытую проблему под новым названием.Этот скрытый режим сбоя продолжает существовать под новым названием. Сохраняйте все компоненты в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь лишь на интуиции, ведь следующая версия может снова привести к тому же скрытому режиму сбоя под новым названием. Сохраняйте все компоненты в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь лишь на интуиции, ведь следующая версия может снова привести к тому же скрытому режиму сбоя под новым названием. Сохраняйте все компоненты в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь лишь на интуиции, ведь следующая версия может снова привести к тому же скрытому режиму сбоя под новым названием. Сохраняйте все компоненты в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь лишь на интуиции, ведь следующая версия может снова привести к тому же скрытому режиму сбоя под новым названием. Сохраняйте все компоненты в рабочем состоянии, измеряйте каждый этап отдельно и не спешите с выпуском, основываясь лишь на интуиции, ведь следующая версия может снова привести к тому же скрытому режиму сбоя под новым названием.