搜索

首页  >  问答  >  正文

为什么在Tailwind中连接的字符串类名不起作用?

每次我最终都会在className之外使用style属性,因为下面的示例都不能将样式应用于我的React元素。你能解释为什么会发生这种情况以及我如何解决这个问题吗?

我已经阅读了文档(https://tailwindcss.com/docs/content-configuration#dynamic-class-names),但我的使用情况是:用户从颜色选择器中选择颜色,然后我根据选择的颜色更改背景。我无法将"bg-[colorValue]"的值传递给每个单独的颜色,所以我必须在之后将该值与"bg-["连接起来。因为我无法将所有颜色映射到完整的类名中。

const red500 = "red-500";
const red600Hex = "#dc2626";
const bgColor = "bg-[" + red600Hex + "]";
const bgColor2 = "bg-[" + "#dc2626" + "]";

function App() {
    return (
        <>
            <h1 className={` bg-${red500} `}>Hello</h1>
            <h1 className={` bg-[${red600Hex}] `}>Hello</h1>
            <h1 className={` bg-${`[${red600Hex}]`} `}>Hello</h1>
            <h1 className={` ${bgColor} `}>Hello</h1>
            <h1 className={` ${bgColor2} `}>Hello</h1>
        </>
    );
}


P粉575055974P粉575055974553 天前754

全部回复(1)我来回复

  • P粉309989673

    P粉3099896732023-07-19 10:57:55

    当模板字面量字符串正常工作时,您无需担心字符串拼接问题。

    const red500 = 'red-500';
    const red600Hex = '#dc2626';
    const bgColor = `bg-[${red600Hex}]`;
    const bgColor2 = `bg-[${'#dc2626'}]`;
    
    export function App() {
      return (
        <>
          <h1 className={` bg-${red500} `}>Hello</h1>
          <h1 className={` bg-[${red600Hex}] `}>Hello</h1>
          <h1 className={` bg-${`[${red600Hex}]`} `}>Hello</h1>
          <h1 className={` ${bgColor} `}>Hello</h1>
          <h1 className={` ${bgColor2} `}>Hello</h1>
        </>
      );
    }

    Tailwind Playground

    上面的链接还给了我一个关于拼接的警告:"Bug Finder: Unexpected string concatenation of literals.eslint"

    我什至添加了一个选项来动态控制最后一个h1 的颜色,通过状态来实现:

    const colors = [
      {value: "#dc2626"},
      {value: "#dc06e6"},
      {value: "#dce606"},
    ]
    
    
    export function App() {
      const [color, setColor] = React.useState(colors[0].value)
      return (
        <>
          <h1 className={`text-green-500 bg-${red500} `}>Hello</h1>
          <h1 className={`bg-[${red600Hex}] `}>Hello</h1>
          <h1 className={`text-green-200 bg-${`[${red600Hex}]`} `}>Hello</h1>
          <h1 className={`${bgColor} `}>Hello</h1>
          <h1 className={`bg-[${color}]`}>Hello</h1>
          <select onChange={(e) => setColor(e.currentTarget.value)}>
            {colors.map(c => <option className={`bg-[${c.value}]`} value={c.value}>{c.value}</option>)}
          </select>
        </>
      );
    }

    回复
    0
  • 取消回复