Что делает комментарий / ** @jsx jsx * / в библиотеке Emotion CSS-in-JS?

Это кажется наилучшей практикой, поскольку она используется почти повсюду. Однако нигде четко не объясняется, что именно он делает ...

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
20
0
5 507
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Эмоция jsx экспорт позволяет вам поместить опору css на любой компонент и автоматически преобразовать ее в опору className.

/** @jsx jsx */ сообщает Babel вызвать переменную jsx вместо React.createElement, которую вы только что импортировали из эмоций.

Ответ принят как подходящий

Это настраиваемая прагма, который сообщает преобразователю 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

Когда я сначала протестировал на простом примере, сломал ли что-нибудь вывод прагмы, ничего не изменилось. Но я перепроверил его сейчас с большим количеством функций, и он действительно ломается. Так что спасибо за подробный ответ!

David Deprost 16.12.2018 17:13

Я не уверен, нужно ли его применять к каждому файлу jsx, чтобы библиотека работала правильно, или его можно применять выборочно к файлам с компонентами, которые импортируют @emotion/core. @emotion/babel-preset-css-prop, похоже, заменяет функцию jsx в каждом файле (или, по крайней мере, в файлах, которые я исследовал), даже если эмоции не были импортированы. Есть ли проблемы / накладные расходы при оптовой замене функции jsx на функцию Emoji?

Jorge Ortega 15.09.2020 23:58

Другие вопросы по теме