добавление нескольких имен классов с помощью пакета имен классов на основе состояния Джейсона

#reactjs

Вопрос:

У меня есть json с другим временем, и я хочу изменить имя класса на основе этого состояния синхронизации.

 {
"jobs": [ 
  {     
      "id": 1,
      "title": "Web Designer/Developer",
      "location": "Tehran",
      "time": "full time",
      "company": "/images/l1.png"
  },
  {     
      "id": 2,
      "title": "Marketing Director",
      "location": "Tehran",
      "time": "part time",
      "company": "/images/l2.png"
  },
  { 
      "id": 3,
      "title": "C Developer(senior)",
      "location": "Tehran",
      "time": "freelance",
      "company": "/images/l3.png"
  },]}
 

Я попробовал пакет имен классов, но я думаю, что что-то не так, потому что он не работает:
Обратите внимание, что это функциональный компонент react

 import classNames from 'classnames';
const className = classNames({
    'btn text-tiny self-center' : true,
    'border-lightgreen text-lightgreen' : job.time === 'full time',
    'border-lightpurpel text-lightpurpel' : job.time === 'part time',
    'border-red text-red' : job.time === 'freelance'
})

<button className={className}>{job.time.toUpperCase()}</button>
 

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

1. Единственное отличие от документации, которое я вижу, заключается в том, что вы используете несколько классов в одной записи/в качестве имени свойства. Не уверен, что это работает.

2. Почему это не работает? Что происходит? Редактировать: Отлично работает в песочнице: codesandbox.io/s/silly-breeze-0ilc2

3. ничего не происходит, просто они не будут добавлены в мой текст!

4. Вы хотели бы использовать какой-нибудь другой пакет?

5. Если да, то вы можете использовать clsx codesandbox.io/s/adding-multiple-classnames-9gfxi

Ответ №1:

Попробуйте сделать это с помощью функции react useState :

 import "./styles.css";
import { useState } from "react";

const json = {
  jobs: [
    {
      id: 1,
      title: "Web Designer/Developer",
      location: "Tehran",
      time: "full time",
      company: "/images/l1.png"
    },
    {
      id: 2,
      title: "Marketing Director",
      location: "Tehran",
      time: "part time",
      company: "/images/l2.png"
    },
    {
      id: 3,
      title: "C Developer(senior)",
      location: "Tehran",
      time: "freelance",
      company: "/images/l3.png"
    }
  ]
};

const CustomButton = ({ jobIndex }) => {
  const job = json.jobs[jobIndex];
  const initialValue =
    job.time === "full time"
      ? "border-lightgreen text-lightgreen"
      : job.time === "part time"
      ? "border-lightpurpel text-lightpurpel"
      : job.time === "freelance"
      ? "border-red text-red"
      : "btn text-tiny self-center";
  const [className, setClassName] = useState(initialValue);
  return <button className={className}>{job.time.toUpperCase()}</button>;
};

export default function App() {
  return <CustomButton jobIndex={0} />;
}
 

Редактировать ТАК называемые имена классов-модуль (раздвоенный)