Это кажется наилучшей практикой, поскольку она используется почти повсюду. Однако нигде четко не объясняется, что именно он делает ...
Я нашел комментарий в документы, в котором говорилось: «Этот комментарий указывает babel преобразовывать jsx в вызовы функции jsx вместо React.createElement». Означает ли это, что стандартная функциональность React заменяется Emotion? Есть ли какие-либо последствия отсутствия комментария / ** @jsx jsx * /?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это настраиваемая прагма, который сообщает преобразователю jsx, в данном случае babel-plugin-transform-react, какую функцию использовать для преобразования вашего jsx в простой javascript.
Компонент React, использующий jsx, выглядит так:
class Hello extends React.Component {
render() {
return <div>Hello {this.props.toWhat}</div>;
}
}
Превратится в это:
class Hello extends React.Component {
render() {
return React.createElement('div', null, `Hello ${this.props.toWhat}`);
}
}
Но при использовании этой настраиваемой прагмы скомпилированный js может выглядеть так:
class Hello extends React.Component {
render() {
return jsx('div', null, `Hello ${this.props.toWhat}`);
}
}
Это полезно, потому что функция jsx может каким-то образом активировать функциональность библиотеки, которую вы используете, изменяя или иным образом используя реквизиты или другие данные, переданные из jsx.
Итак, ответ на этот вопрос:
Are there any consequences from leaving out the /** @jsx jsx */
Да. Вероятно, это нарушит функциональность библиотеки.
РЕДАКТИРОВАТЬ
Это упоминается в документации по эмоциям здесь: https://emotion.sh/docs/css-prop#jsx-pragma
Я не уверен, нужно ли его применять к каждому файлу jsx, чтобы библиотека работала правильно, или его можно применять выборочно к файлам с компонентами, которые импортируют @emotion/core. @emotion/babel-preset-css-prop, похоже, заменяет функцию jsx в каждом файле (или, по крайней мере, в файлах, которые я исследовал), даже если эмоции не были импортированы. Есть ли проблемы / накладные расходы при оптовой замене функции jsx на функцию Emoji?
Когда я сначала протестировал на простом примере, сломал ли что-нибудь вывод прагмы, ничего не изменилось. Но я перепроверил его сейчас с большим количеством функций, и он действительно ломается. Так что спасибо за подробный ответ!