Я неправильно передаю эту опору?

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

import React from "react";


function Button(props) {

    return (
        <button
            className = {`px-4 py-2 rounded w-max mx-2 ${props.bgColor} ${props.textColor} hover:${props.hoverColor}`}>
            {props.text}
        </button>

    );
}

export default Button;
import React from 'react';
import { IoPersonOutline } from "react-icons/io5";
import Button from './Button';




function Navbar() {

    return (
        <nav className = "flex items-center justify-between h-16 bg-white px-4 shadow-sm">

            <div className = "flex items-center my-2">


                <Button bgColor = "bg-red" text = "Post Ad"><span className = "flex items-center gap-2"><IoPersonOutline /></span>
                </Button>
                <Button hoverColor='bg-gray' textColor='text-dark-gray' text='Blue' />
                <Button hoverColor='bg-light-gray' textColor='text-dark-gray' text='Blue' />
                <Button hoverColor='bg-light-gray' textColor='text-dark-gray' text='Blue' />

            </div>
            <div className = "flex items-center my-2">

                <input type = "text" placeholder = "Searching in all..." className = "px-4 py-2 rounded-md bg-light-gray text-current" />
                <Button textColor = "text-dark-gray" text = "Search" />
                <Button textColor = "text-dark-gray" text = "Settings" />

                <div className = "sm:w-px h-8 mx-5 bg-gray"></div>
                <h1 className = " text-xl font-bold mr-2 text-red">Divar</h1>
            </div>
        </nav>
    );
}

export default Navbar;

Я сделал все, что знал, но ничего не изменилось. Пожалуйста, дайте мне знать, если вы можете определить, что я делаю неправильно.

🤔 А знаете ли вы, что...
React предоставляет жизненные циклы компонентов для управления состоянием и поведением.


52
1

Ответ:

Решено

Согласно документации:

Самым важным следствием того, как Tailwind извлекает имена классов, является то, что он находит только те классы, которые существуют в исходных файлах в виде полных непрерывных строк.

Если вы используете интерполяцию строк или объединяете частичные имена классов, Tailwind не найдет их и, следовательно, не сгенерирует соответствующий CSS:

Не создавайте имена классов динамически

<div class = "text-{{ error ? 'red' : 'green' }}-600"></div>

В приведенном выше примере строки text-red-600 и text-green-600 не существуют, поэтому Tailwind не будет генерировать эти классы. Вместо этого убедитесь, что все имена классов, которые вы используете, существуют полностью:

Всегда используйте полные имена классов

<div class = "{{ error ? 'text-red-600' : 'text-green-600' }}"></div>

Вы могли бы:

  • Поместите весь класс в переменную, в которую вы передаете hoverColor, например
    <button
      className = {`… ${props.hoverColor}`}>
    
    <Button hoverColor='hover:bg-gray' … />
    <Button hoverColor='hover:bg-light-gray' … />
    <Button hoverColor='hover:bg-light-gray' … />
    
  • Имейте словарь для color для имен классов Tailwind:
    function Button(props) {
      const DICTIONARY = {
        'bg-gray': 'hover:bg-gray',
        'bg-light-gray': 'hover:bg-light-gray',
        // …
      };
      // …
      <button
        className = {`… ${DICTIONARY[props.hoverColor]}`}>
    
  • занесите в сейф классы, если у вас ограниченное количество известных цветов:
    module.exports = {
      safelist: [
        {
          pattern: /^bg-((light-)?gray)$/,
          variants: ['hover'],
        },
        // …
      ],
      // …
    ];
    

Интересные вопросы для изучения