Измените встроенный css с помощью проблемы react

#reactjs #gatsby

Вопрос:

Я сопоставляю некоторые значения дат в моем интерфейсе Gatsby, которые я извлекаю из своего бэкенда Strapi.

Чего я хочу добиться, так это изменить цвет фона в зависимости от того, больше ли значение {item.end} текущей даты. {item.end} содержит значение даты.

Я сделал обычную инструкцию if-else, чтобы проверить это условие, при регистрации консоли она возвращает мне правильное количество итераций в цикле с правильными ответами, основанными на значениях даты.

Но когда я пытаюсь применить ту же логику для своей опоры со следующим:

 <h4 className={
    TodayDate.getDate() > courseEndDate? "educationsOver": "job-desc"
}>{item.title}
</h4>
 

Классы не применяются динамически. Никакие изменения не применяются, и применяется только стандартный класс .job-desc.

Это мой текущий код:

 {course.map(item => {

            let courseEndDate = item.end
            //console.log(`Course end date: ${courseEndDate}`)
            const TodayDate = new Date()
            courseEndDate = new Date(courseEndDate)

            if (TodayDate > courseEndDate) {
              console.log(
                `${courseEndDate} Course end date is not greater than the current date ${TodayDate}.`
              )
            } else {
              console.log(
                `${courseEndDate} Course end date is greater than the current date ${TodayDate}.`
              )
            }

            return (
              <div key={item.id} className="job-desc">
                <h4>Kurs:</h4>
                <h4
                  className={
                    TodayDate.getDate() > courseEndDate
                      ? "educationsOver"
                      : "job-desc"
                  }
                >
                  {item.title}
                </h4>
                <span>{item.credits}amp;nbsp;poäng</span>
                <span>startdatum: {item.start}</span>amp;nbsp;
                <span>slutdatum: {item.end}</span>
              </div>
            )
          })}
 

Что я пропустил в своем коде?

Ответ №1:

Я думаю, что ваш код должен выглядеть так:

 <h4 className={TodayDate > courseEndDate ? "educationsOver" : "job-desc"}>
 

Обратите внимание на удаление getDate() .

Как бы я изменил код, основываясь на тех же условиях даты, если бы я просто хотел изменить фон в описании задания

Просто сделай:

         return (
          {TodayDate.getDate() > courseEndDate 
          ? 
          <div key={item.id} className="classname-1">
            <h4>Kurs:</h4>
            <h4 className="educationsOver">
              {item.title}
            </h4>
            <span>{item.credits}amp;nbsp;poäng</span>
            <span>startdatum: {item.start}</span>amp;nbsp;
            <span>slutdatum: {item.end}</span>
          </div>
          : <div key={item.id} className="classname-2">
            <h4>Kurs:</h4>
            <h4 className="job-desc">
              {item.title}
            </h4>
            <span>{item.credits}amp;nbsp;poäng</span>
            <span>startdatum: {item.start}</span>amp;nbsp;
            <span>slutdatum: {item.end}</span>
          </div>
         }
        )
 

Наконец исправлено с использованием того же подхода, что и описано:

 <h4 style={{ color: TodayDate > courseEndDate ? "red" : "grey",}} > {item.title} </h4>
 

Комментарии:

1. Спасибо @Ferran, соответствующий класс отображается в элементе html div educationsOver, но инспектор css показывает описание задания. Я думаю, что я слишком усложняю это, на самом деле я мог бы использовать класс .job-desc, но просто измените цвет фона. Как бы я изменил код, основываясь на тех же условиях даты, если бы я просто хотел изменить фон в описании задания

2. Просто добавьте троичное условие в return инструкцию

3. Я решил эту проблему следующим образом: <стиль h4={{ цвет: дата сегодняшнего дня > Дата окончания курса ? «красный» : «серый»,}} > {пункт.название} ></h4>