Головна / Статті / Vite + React з нуля, із активованим React Compiler вже на початку

Vite + React з нуля, із активованим 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

Тримайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий непомітний режим несправності під новою назвою.Залишайте тестові засоби у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий непомітний режим збою під новою назвою.Уникайте того самого прихованого способу збою під новою назвою. Зберігайте пристрої у стані „зеленого“ рівня, вимірюйте кожну стадію окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий прихований спосіб збою під новою назвою. Зберігайте пристрої у стані „зеленого“ рівня, вимірюйте кожну стадію окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий прихований спосіб збою під новою назвою. Зберігайте пристрої у стані „зеленого“ рівня, вимірюйте кожну стадію окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий прихований спосіб збою під новою назвою. Зберігайте пристрої у стані „зеленого“ рівня, вимірюйте кожну стадію окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий прихований спосіб збою під новою назвою. Зберігайте пристрої у стані „зеленого“ рівня, вимірюйте кожну стадію окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий прихований спосіб збою під новою назвою.назва. Зберігайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий непомітний режим несправності під новою назвою. Зберігайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий непомітний режим несправності під новою назвою. Зберігайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий непомітний режим несправності під новою назвою. Зберігайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий непомітний режим несправності під новою назвою. Зберігайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести той самий непомітний режим несправності під новою назвою. Зберігайте пристрої у справному стані, вимірюйте кожен етапЗалишайте пристрої у справному стані, вимірюйте кожну стадію окремо та не поспішайте з випуском, якщо наступна версія може знову ввести той самий непомітний режим несправності під новою назвою.Зберігайте тестові засоби у стані „зеленому“, вимірюйте кожну стадію окремо та відмовляйтесь від релізу, спираючись лише на інтуїцію, коли наступна версія може знову ввести той самий непомітний режим збою під новою назвою.Зберігайте пристрої у справному стані, вимірюйте кожен етап окремо та не поспішайте з випуском, спираючись лише на інтуїцію, адже наступна версія може знову ввести ту саму приховану проблему під новою назвою.