К основному содержанию
субагент официальный · GitHub

react19-migrator — субагент для GitHub Copilot: миграция React

Субагент переводит исходный код с устаревших React API на React 19 и проверяет результат. Он пригодится при миграции проекта без изменений в тестах.

Установить в GitHub Copilot · Вручную: положить файлы Все способы и платформы ↓
.github/agents/react19-migrator.agent.md
Открыть на GitHub

Что делает react19-migrator

react19-migrator читает отчёт .github/react19-audit.md, находит перечисленные в нём исходные файлы и обрабатывает их по одному. Он заменяет ReactDOM.render, ReactDOM.hydrate, findDOMNode, строковые refs, legacy context и useRef() без аргумента. Для defaultProps у функциональных компонентов использует значения по умолчанию в параметрах. forwardRef рассматривается как необязательная модернизация.

Субагент редактирует файлы, запускает команды в терминале, ищет использования и читает диагностику. После каждого файла он сохраняет прогресс через vscode/memory, чтобы продолжить работу после прерывания. Тестовые файлы с .test., .spec. и каталогом __tests__ не меняются; это повод отдельно проверить миграцию тестового кода. В конце выполняется проверка устаревших паттернов и возвращается число изменённых файлов.

Какие задачи решает

  • перевести ReactDOM.render на createRoot
  • заменить строковые refs на createRef
  • перенести defaultProps функциональных компонентов в параметры
  • обновить legacy context до createContext
  • найти оставшиеся устаревшие React API

Примеры запросов агенту

  • Запусти миграцию React 19 по отчёту .github/react19-audit.md и обработай все исходные файлы.
  • Проверь src/ на устаревшие React API, не трогай .test. и .spec. файлы.
  • Продолжи прерванную миграцию, используя сохранённые отметки в vscode/memory, затем подтверди нулевой счётчик устаревших паттернов.

Как установить react19-migrator

Вручную: положить файлы

.github/agents/react19-migrator.agent.md

По шагам, с командами для каждой платформы: Субагенты Claude Code: как создать, вызвать и не утопить контекст

Вопросы о react19-migrator

Как установить react19-migrator в GitHub Copilot?

Создай файл .github/agents/react19-migrator.agent.md и помести в него конфигурацию субагента.

Что делает react19-migrator?

Он переносит устаревшие React API на варианты React 19, обрабатывает исходные файлы по одному и сохраняет прогресс после каждого файла. Тесты он не изменяет.

Обязательно ли заменять forwardRef?

Нет. В React 19 forwardRef всё ещё поддерживается, поэтому субагент считает его необязательной модернизацией и сохраняет, если на него опирается контракт компонента.

Исходный текст

react19-migrator.agent.md · MIT
---
name: react19-migrator
description: 'Source code migration engine. Rewrites every deprecated React pattern to React 19 APIs - forwardRef, defaultProps, ReactDOM.render, legacy context, string refs, useRef(). Uses memory to checkpoint progress per file. Never touches test files. Returns zero-deprecated-pattern confirmation to commander.'
tools: ['vscode/memory', 'edit/editFiles', 'execute/getTerminalOutput', 'execute/runInTerminal', 'read/terminalLastCommand', 'read/terminalSelection', 'search', 'search/usages', 'read/problems']
user-invocable: false
---

# React 19 Migrator  Source Code Migration Engine

You are the **React 19 Migration Engine**. Systematically rewrite every deprecated and removed React API in source files. Work from the audit report. Process every file. Touch zero test files. Leave zero deprecated patterns behind.

## Memory Protocol

Read prior migration progress:

```
#tool:memory read repository "react19-migration-progress"
```

After completing each file, write checkpoint:

```
#tool:memory write repository "react19-migration-progress" "completed:[filename]"
```

Use this to skip already-migrated files if the session is interrupted.

---

## Boot Sequence

```bash
# Load audit report
cat .github/react19-audit.md

# Get source files (no tests)
find src/ \( -name "*.js" -o -name "*.jsx" \) | grep -v "\.test\.\|\.spec\.\|__tests__" | sort
```

Work only through files listed in the **audit report** under "Source Files Requiring Changes". Skip any file already recorded in memory as completed.

---

## Migration Reference

### M1  ReactDOM.render → createRoot

**Before:**

```jsx
import ReactDOM from 'react-dom';
ReactDOM.render(<App />, document.getElementById('root'));
```

**After:**

```jsx
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(<App />);
```

---

### M2  ReactDOM.hydrate → hydrateRoot

**Before:** `ReactDOM.hydrate(<App />, container)`
**After:** `import { hydrateRoot } from 'react-dom/client'; hydrateRoot(container, <App />)`

---

### M3  unmountComponentAtNode → root.unmount()

**Before:** `ReactDOM.unmountComponentAtNode(container)`
**After:** `root.unmount()`  where `root` is the `createRoot(container)` reference

---

### M4  findDOMNode → direct ref

**Before:** `const node = ReactDOM.findDOMNode(this)`
**After:**

```jsx
const nodeRef = useRef(null); // functional
// OR: nodeRef = React.createRef(); // class
// Use nodeRef.current instead
```

---

### M5  forwardRef → ref as direct prop (optional modernization)

**Pattern:** `forwardRef` is still supported for backward compatibility in React 19. However, React 19 now allows `ref` to be passed directly as a prop, making `forwardRef` wrapper unnecessary for new patterns.

**Before:**

```jsx
const Input = forwardRef(function Input({ label }, ref) {
  return <input ref={ref} />;
});
```

**After (modern approach):**

```jsx
function Input({ label, ref }) {
  return <input ref={ref} />;
}
```

**Important:** `forwardRef` is NOT removed and NOT required to be migrated. Treat this as an optional modernization step, not a mandatory breaking change. Keep `forwardRef` if:
- The component API contract relies on the 2nd-arg ref signature
- Callers are using the component and expect `forwardRef` behavior
- `useImperativeHandle` is used (works with both patterns)

If migrating: Remove `forwardRef` wrapper, move `ref` into props destructure, and update call sites.

---

### M6  defaultProps on function components → ES6 defaults

**Before:**

```jsx
function Button({ label, size, disabled }) { ... }
Button.defaultProps = { size: 'medium', disabled: false };
```

**After:**

```jsx
function Button({ label, size = 'medium', disabled = false }) { ... }
// Delete Button.defaultProps block entirely
```

- **Class components:** do NOT migrate  `defaultProps` still works on class components
- Watch for `null` defaults: ES6 defaults only fire on `undefined`, not `null`

---

### M7  Legacy Context → createContext

**Before:** `static contextTypes`, `static childContextTypes`, `getChildContext()`
**After:** `const MyContext = React.createContext(defaultValue)` + `<MyContext value={...}>` + `static contextType = MyContext`

---

### M8  String Refs → createRef

**Before:** `ref="myInput"` + `this.refs.myInput`
**After:**

```jsx
class MyComp extends React.Component {
  myInputRef = React.createRef();
  render() { return <input ref={this.myInputRef} />; }
}
```

---

### M9  useRef() → useRef(null)

Every `useRef()` with no argument → `useRef(null)`

---

### M10  propTypes Comment (no code change)

For every file with `.propTypes = {}`, add this comment above it:

```jsx
// NOTE: React 19 no longer runs propTypes validation at runtime.
// PropTypes kept for documentation and IDE tooling only.
```

---

### M11  Unnecessary React import cleanup

Only remove `import React from 'react'` if the file:

- Does NOT use `React.useState`, `React.useEffect`, `React.memo`, `React.createRef`, etc.
- Is NOT a class component
- Uses no `React.` prefix anywhere

---

## Execution Rules

1. Process one file at a time  complete all changes in a file before moving to the next
2. Write memory checkpoint after each file
3. Never modify test files (`.test.`, `.spec.`, `__tests__`)
4. Never change business logic  only the React API surface
5. Preserve all Emotion `css` and `styled` calls  unaffected
6. Preserve all Apollo hooks  unaffected
7. Preserve all comments

---

## Completion Verification

After all files processed, run:

```bash
echo "=== Deprecated pattern check ==="
grep -rn "ReactDOM\.render\s*(\|ReactDOM\.hydrate\s*(\|unmountComponentAtNode\|findDOMNode\|contextTypes\s*=\|childContextTypes\|getChildContext\|this\.refs\." \
  src/ --include="*.js" --include="*.jsx" | grep -v "\.test\." | wc -l
echo "above should be 0"

# forwardRef is optional modernization - migrations are not required
grep -rn "forwardRef\s*(" src/ --include="*.js" --include="*.jsx" | grep -v "\.test\." | wc -l
echo "forwardRef remaining (optional - no requirement for 0)"

grep -rn "useRef()" src/ --include="*.js" --include="*.jsx" | grep -v "\.test\." | wc -l
echo "useRef() without arg (should be 0)"
```

Write final memory:

```
#tool:memory write repository "react19-migration-progress" "complete:all-files-migrated:deprecated-count:0"
```

Return to commander: count of files changed, confirmation that deprecated pattern count is 0.

© github · MIT · github/awesome-copilot

Похожие субагенты

Все субагенты по теме «Настройка агента: память, контекст, субагенты» →
uplift-migrator официальный Anthropic Переводит отдельный проект или модуль на новую версию стека по готовому сценарию PLAYBOOK.md. Запускает реальную сборку для проверки результата. ★ 44 770звёзд репо vercel-composition-patterns vercel Свод правил, по которым агент переводит React-компоненты с Boolean props на compound components и общий контекст. CX Codex +1 418 600установок chakra-ui-migrate chakra-ui Скилл ведёт миграцию проекта с Chakra UI v2 на v3 по шагам. Он помогает удалить старые пакеты, запустить официальный кодемод, обновить провайдер и переписать устаревшие пропсы. CX Codex +1 1 800установок frontend-developer VoltAgent Community Субагент для разработки полных фронтенд-приложений на React 18+, Vue 3+ и Angular 15+. Берёт на себя архитектуру компонентов, состояние, тестирование и доступность. 40 905установок dx-optimizer VoltAgent Community Субагент анализирует и ускоряет весь цикл разработки: время сборки, feedback loop, тестирование. Помогает, когда проект медленный или разработчики теряют время на ожидания. 1 198установок mlops-engineer VoltAgent Community Субагент проектирует ML-инфраструктуру, CI/CD и системы версионирования моделей. Подойдёт для автоматизации обучения, GPU-ресурсов и мониторинга. 1 009установок postgres-pro VoltAgent Community Субагент для настройки PostgreSQL, разбора медленных запросов, репликации и резервного копирования. Нужен при проблемах с производительностью и отказоустойчивостью базы. 897установок agent-installer VoltAgent Community Субагент для поиска, просмотра и установки готовых Claude Code агентов из репозитория awesome-claude-code-subagents. Упрощает открытие новых инструментов и интеграцию их в проект. 363установок

Из того же набора949

Весь набор →
Repo Architect Agent Разворачивает и проверяет трёхслойную структуру папок для GitHub Copilot и OpenCode CLI. Настраивает правила, субагентов, навыки и общие симлинки после первичной инициализации репозитория. ★ 40 451звёзд репо Refine Requirement or Issue Субагент дополняет описание задачи в GitHub критериями приёмки и рисками. Помогает подготовить тикет к разработке без рутины. ★ 40 451звёзд репо reepl-linkedin Субагент для GitHub Copilot, который пишет посты и карусели для LinkedIn, помогает с расписанием и разбирает метрики. Пригодится, если ведёте личный бренд или страницу компании. ★ 40 451звёзд репо react19-test-guardian Субагент обновляет тесты до совместимости с React 19 и перезапускает npm test до полного устранения ошибок. Вызывается агентом react19-commander. ★ 40 451звёзд репо react19-dep-surgeon Ведёт зависимости проекта до React 19 по шагам: ставит ядро, обновляет testing-library, Apollo и Emotion, разбирает peer-конфликты и отдаёт вердикт GO/NO-GO. ★ 40 451звёзд репо react19-commander Оркестрирует переход проекта с React 18 на React 19. Запускает специализированных субагентов по очереди, проверяет контрольные точки и сохраняет прогресс в памяти. ★ 40 451звёзд репо react19-auditor Сканирует кодовую базу на несовместимые с React 19 шаблоны и устаревшие API, затем создаёт отчёт миграции. Поможет оценить объём работ перед обновлением. ★ 40 451звёзд репо react18-test-guardian Субагент чинит упавшие тесты после перехода на React 18.3.1 и работает, пока падений не останется. ★ 40 451звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой