Главная / Статьи / Вите + Реакт с нуля, с ранним включением React Compiler

Вите + Реакт с нуля, с ранним включением React Compiler

Создайте среду разработки с Vite, прочитайте файл entrypoint и включите React Compiler до того, как будет реализована первая функциональность.

1732 слов

Изначальная концепция 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

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