Задать вопрос
@uroot

Как задать if-else в стилях?

Есть вот такое:
<p
  style={{ bottom:  (669 * size) / SIZES.MAX }}
>

Как запись { bottom: (669 * size) / SIZES.MAX } закинуть в if, а при else добавить другие значения в style?
Чтобы получилось что-то вроде:
<p
  style={SIZES.MAX > 0 
     ?
     { bottom:  (669 * size) / SIZES.MAX } 
     : 
    { bottom:  (669 * size) } 
  }
>
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
  • Skillfactory
    Специализация Frontend-разработчик
    9 месяцев
    Далее
Решения вопроса 1
KulakovAngel
@KulakovAngel
Full Stack Developer (Node.JS)
Как заметил Валерий, ошибка, скорее всего, потому, что передаете число. Попробуйте передавать строку (можно использовать "обратные кавычки"):
<p
    style={
        SIZES.MAX > 0 ? {
            bottom:  `${(669 * size) / SIZES.MAX}px`,
            color: `red`
        } : {
            bottom:  `${(669 * size)}px`,
            color: `blue`
        }
    }
>


Но вообще, если стилей много, я бы вынес это из "инлайна". Например, через функцию:
class MyParagraph extends React.Component {
  render() {
    //init values
    const SIZES = {MAX: 45};
    const size = 1;
    
    //get styles
    function getParagraphStyles(condition) {
      if (condition > 0) {
        return {
          bottom: `${(669 * size) / SIZES.MAX}px`,
          color: `red`,
        }
      } else {
        return {
          bottom: `${(669 * size)}px`,
          color: `blue`,
        }
      }
    }
    
    return (
      <p style={getParagraphStyles(SIZES.MAX)}>
        Paragraph
      </p>
    )
  }
};


Еще лучше getParagraphStyles() вынести в метод (если используете классовый подход) или в хук (если используете функциональный подход). Вместо if .. else можно и тернарник заюзать. Можно и стрелку написать - еще короче будет. Но сделал подробнее для наглядности. И да, как заметил Валерий, не забывайте указывать единицы измерения (px, скорее всего). React вроде CSS проверяет и ошибочный не пропускает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
vmakhnyuk
@vmakhnyuk
Frontend developer
<p style={{bottom: SIZES.MAX > 0 ? `${(669 * size) / SIZES.MAX}` : `${669 * size}`}}

значения для css полей должны быть строками. Также, нужно добавить единицы измерения(px, em, rem...) для этих значений
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽