Динамическое создание класса css в React

#javascript #reactjs

#javascript #reactjs

Вопрос:

Мне нужно создать класс CSS с медиа-запросами на основе входного изображения. Сценарий react для создания css должен выглядеть примерно так:

   const getBackgroungImageSet = (image) => {
    return `.mycontainer {    
                background-image:url("${image}?mw=500"); // big image   
            }
            
            @media(max-width: 768px){
              .mycontainer {
                    background-image:url("${image}?mw=250"); // small image  
                }
            }`;
  }
  

Возможно ли добавить этот класс в документ в react?

Ответ №1:

Вот способ добавления ваших стилей с помощью тега style. Фактический метод основан на чем-то, показанном в документации для React Helmet. Это хороший способ перенести теги вашего стиля в заголовок документа, а не произвольно в середину dom.

Для тега style вам нужно использовать type="text/css" и использовать строку, чтобы не было синтаксических ошибок из-за недопустимости синтаксиса CSS в JSX.

 function Example() {
  return (
    <div>
      <span>This should be purple</span>
      <br/>
      <span>This should have a blue border</span>
      <style type="text/css">{`
        span {
          color: purple;
        }
        span:nth-of-type(2){
          color: inherit;
          border: 2px solid blue;
        }
      `}</style>
    </div>
  );
}
ReactDOM.render(<Example />, document.getElementById('root'));  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<div id="root"/>