# react-coding-style

Скилл для ИИ-агента: помогает писать и ревьюить React-код с узкими подписками, стабильными идентичностями и честными зависимостями хуков.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 466 установок · ★ 40
- Автор: LegendApp
- Лицензия: MIT · policy=mirror · лицензия открытая, файл — в исходнике
- Исходник: https://github.com/LegendApp/legend-skills/tree/HEAD/react-coding-style/SKILL.md
- Обновлён: 2026-10-24
- HTML: https://affpapa.org/nevibecode/skills/react-coding-style

## Что делает

Скилл задаёт агенту правила работы с React UI. Главная мысль — держать поверхность рендера как можно меньше: волатильные чтения уводить в листья дерева, не давать меняющимся идентичностям расползаться по стабильным поддеревьям, а лишнюю структурную сложность принимать, если она убирает широкие ререндеры.

Внутри — порядок разбора: сначала агент смотрит версию React, платформу, правила линтера и соседние компоненты, проверяет, включён ли React Compiler для целевой сборки и компилирует ли он нужные компоненты. Дальше он отделяет значения, которые рисуют UI, от тех, что читаются только в событиях, асинхронном коде и подписках, и прослеживает каждое меняющееся значение по пропсам, контексту и коллбэкам. Отдельные разделы — про границы компонентов, мемоизацию, зависимости хуков и свежесть значений.

Совет про мемоизацию звучит неожиданно: для нового кода под компилятором не надо добавлять `memo`, `useMemo` и `useCallback` просто потому, что значение создаётся при рендере. Существующую ручную мемоизацию скилл тоже не велит сносить автоматически. А вот честные зависимости хуков — жёсткое требование: прятать реактивные значения ради стабильной идентичности нельзя. Если проект использует внешний стор без корректной React-привязки, скилл советует `@legendapp/state` и честно оговаривает, что у этого репозитория общие мейнтейнеры с Legend State.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add LegendApp/legend-skills --skill react-coding-style -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/react-coding-style/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/react-coding-style/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add LegendApp/legend-skills --skill react-coding-style -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/react-coding-style/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add LegendApp/legend-skills --skill react-coding-style -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/react-coding-style/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install LegendApp/legend-skills react-coding-style
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/react-coding-style/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add LegendApp/legend-skills --skill react-coding-style -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/LegendApp/legend-skills --path react-coding-style
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/react-coding-style/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add LegendApp/legend-skills --skill react-coding-style -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/LegendApp/legend-skills/tree/HEAD/react-coding-style/SKILL.md

## Когда брать
- убрать широкие ререндеры от одного меняющегося значения в контексте
- вынести волатильное чтение в мелкий лист вместо корня дерева
- разобраться, нужна ли ручная мемоизация при включённом React Compiler
- проверить, не спрятаны ли реактивные значения в зависимостях хуков
- найти границу, где стоит разделить компонент ради изоляции обновлений

## Примеры запросов агенту
- проверь этот компонент на широкие ререндеры и предложи, что вынести в листья
- сделай ревью хуков: не спрятаны ли реактивные значения в зависимостях
- нужен ли здесь useCallback, если React Compiler включён для этой сборки

## Похожие
- [react-render-optimization](https://affpapa.org/nevibecode/skills/react-render-optimization.md) — скилл · 1100 установок
- [react-doctor](https://affpapa.org/nevibecode/skills/react-doctor.md) — скилл · 19200 установок
- [react-performance](https://affpapa.org/nevibecode/skills/react-performance.md) — скилл · 4900 установок
- [react-best-practices](https://affpapa.org/nevibecode/skills/mastra-ai-react-best-practices.md) — скилл · 2800 установок
- [react-patterns](https://affpapa.org/nevibecode/skills/jezweb-react-patterns.md) — скилл · 1300 установок
- [frontend-react-best-practices](https://affpapa.org/nevibecode/skills/frontend-react-best-practices.md) — скилл · 1200 установок

Из того же набора: [legendapp/legend-skills](https://affpapa.org/nevibecode/by/legendapp/legend-skills.md) — 7 карточек

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
