Директивы¶
Директивы React Compiler - это специальные строковые литералы, которые управляют тем, компилируются ли отдельные функции.
1 2 3 4 | |
Обзор¶
Директивы React Compiler дают точечный контроль над тем, какие функции оптимизирует компилятор. Это строковые литералы, которые ставятся в начало тела функции или в начало модуля.
Доступные директивы¶
"use memo"- включает функцию в компиляцию"use no memo"- исключает функцию из компиляции
Краткое сравнение¶
| Директива | Назначение | Когда использовать |
|---|---|---|
"use memo" | Принудительная компиляция | В режиме annotation или чтобы переопределить эвристики режима infer |
"use no memo" | Запрет компиляции | Отладка проблем или работа с несовместимым кодом |
Использование¶
Директивы на уровне функции¶
Поставьте директиву в начало функции, чтобы управлять её компиляцией:
1 2 3 4 5 6 7 8 9 10 11 | |
Директивы на уровне модуля¶
Поставьте директиву в начало файла, чтобы она действовала на все функции модуля:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Взаимодействие с режимами компиляции¶
Директивы ведут себя по-разному в зависимости от compilationMode:
- Режим
annotation: компилируются только функции с"use memo" - Режим
infer: компилятор сам решает, что компилировать, а директивы переопределяют его решения - Режим
all: компилируется всё, а"use no memo"может исключить отдельные функции
Рекомендации¶
Используйте директивы умеренно¶
Директивы - это лазейки. Предпочитайте настраивать компилятор на уровне проекта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Документируйте использование директив¶
Всегда объясняйте, зачем используется директива:
1 2 3 4 5 6 7 8 9 10 11 | |
Планируйте удаление¶
Директивы исключения должны быть временными:
- Добавьте директиву с комментарием TODO
- Создайте задачу для отслеживания
- Исправьте исходную проблему
- Удалите директиву
1 2 3 4 | |
Распространённые шаблоны¶
Постепенное внедрение¶
При внедрении React Compiler в большую кодовую базу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Устранение неполадок¶
По конкретным проблемам с директивами смотрите разделы устранения неполадок:
Типичные проблемы¶
- Директива игнорируется: проверьте расположение (должна быть первой) и написание
- Компиляция всё равно происходит: проверьте параметр
ignoreUseNoForget - Директива модуля не работает: убедитесь, что она стоит перед всеми импортами
См. также¶
compilationMode- как компилятор выбирает, что оптимизироватьКонфигурация- все параметры конфигурации компилятора- Документация React Compiler - руководство по началу работы
Источник — https://react.dev/reference/react-compiler/directives