compilationMode¶
Параметр compilationMode управляет тем, как React Compiler выбирает функции для компиляции.
1 2 3 | |
Описание¶
compilationMode¶
Управляет стратегией, по которой React Compiler определяет, какие функции оптимизировать.
Тип¶
1 | |
Значение по умолчанию¶
'infer'
Варианты¶
'infer'(по умолчанию): Компилятор использует интеллектуальные эвристики, чтобы определить компоненты и хуки React:- Функции, явно помеченные директивой
"use memo" -
Функции, названные как компоненты (PascalCase) или хуки (префикс
use), которые при этом создают JSX и/или вызывают другие хуки -
'annotation': Компилируются только функции, явно помеченные директивой"use memo". Подходит для постепенного внедрения. -
'syntax': Компилируются только компоненты и хуки, которые используют синтаксис Flow component и hook. -
'all': Компилируются все функции верхнего уровня. Не рекомендуется, потому что могут быть скомпилированы функции, не относящиеся к React.
Предупреждения¶
- Режим
'infer'требует, чтобы функции следовали соглашениям об именовании React, иначе они не будут обнаружены - Режим
'all'может ухудшить производительность, компилируя служебные функции - Режим
'syntax'требует Flow и не работает с TypeScript - Независимо от режима, функции с директивой
"use no memo"всегда пропускаются
Использование¶
Режим вывода по умолчанию¶
Режим 'infer' по умолчанию хорошо подходит для большинства кодовых баз, которые следуют соглашениям React:
1 2 3 | |
В этом режиме будут скомпилированы такие функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Постепенное внедрение в режиме annotation¶
Для постепенной миграции используйте режим 'annotation', чтобы компилировать только помеченные функции:
1 2 3 | |
Затем явно пометьте функции, которые нужно скомпилировать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Использование режима синтаксиса Flow¶
Если кодовая база использует Flow вместо TypeScript:
1 2 3 | |
Затем используйте синтаксис компонентов Flow:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Исключение отдельных функций¶
Независимо от режима компиляции, используйте "use no memo", чтобы пропустить компиляцию:
1 2 3 4 5 6 7 8 | |
Устранение неполадок¶
Компонент не компилируется в режиме infer¶
В режиме 'infer' убедитесь, что компонент следует соглашениям React:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Источник — https://react.dev/reference/react-compiler/compilationMode