You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中使用变量无法修改Tailwind样式问题求助

Tailwind CSS无法识别map循环中动态拼接的宽度类名

我在构建一个由1个父div和8个子div组成的骨架屏,需要给子div设置不同宽度。用变量拼接Tailwind类名的方式在map循环中不生效,Tailwind无法识别w-[xxxpx]这类动态生成的样式。

我的代码:

import { FC } from 'react';

const randomWidthArray = ["110", "94", "123", "87", "93", "113", "125", "120"]

const CategorySkeleton: FC = () => {
  return (
    <div className="flex flex-col w-[300px] border-r border-r-[#D5D5D5] gap-y-[8px]">
      <div className="w-[150px] h-[28px] mb-[14px] bg-[#D5D5D5]"></div>
      {randomWidthArray.map((width: string, idx: number) => {
        const widthStyle = `w-[${width}px]`;
        return <div key={idx} className={`h-[19px] bg-[#D5D5D5] ${widthStyle}`}></div>;
      })}
    </div>
  );
};

export default CategorySkeleton;

尝试过用数字/字符串类型的变量、直接在className中拼接,都没解决问题。


问题原因

Tailwind的JIT编译器是静态扫描代码生成CSS的,它只会识别代码中明确写出的类名(比如w-[110px])。动态拼接的类名(比如w-[${width}px])在构建阶段是字符串模板,编译器无法解析变量的具体值,因此不会生成对应的CSS规则,导致样式不生效。


解决方案

方案1:使用内联样式(最直接)

既然宽度是动态值,直接通过style属性设置宽度,绕过Tailwind的类名限制:

import { FC } from 'react';

const randomWidthArray = ["110", "94", "123", "87", "93", "113", "125", "120"]

const CategorySkeleton: FC = () => {
  return (
    <div className="flex flex-col w-[300px] border-r border-r-[#D5D5D5] gap-y-[8px]">
      <div className="w-[150px] h-[28px] mb-[14px] bg-[#D5D5D5]"></div>
      {randomWidthArray.map((width: string, idx: number) => {
        return (
          <div 
            key={idx} 
            className="h-[19px] bg-[#D5D5D5]"
            style={{ width: `${width}px` }}
          ></div>
        );
      })}
    </div>
  );
};

export default CategorySkeleton;

方案2:提前静态声明所有用到的类名

如果坚持要用Tailwind类名,可以在代码中静态写出所有需要的宽度类(比如用隐藏元素),让编译器扫描到:

// 静态声明所有宽度类,让Tailwind识别
<div className="hidden w-[110px] w-[94px] w-[123px] w-[87px] w-[93px] w-[113px] w-[125px] w-[120px]"></div>

// 原map循环代码不变
{randomWidthArray.map((width: string, idx: number) => {
  const widthStyle = `w-[${width}px]`;
  return <div key={idx} className={`h-[19px] bg-[#D5D5D5] ${widthStyle}`}></div>;
})}

方案3:在Tailwind配置中自定义宽度

把所有需要的宽度加到tailwind.config.js的theme.extend.width里,然后用静态类名:

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      width: {
        '110': '110px',
        '94': '94px',
        '123': '123px',
        '87': '87px',
        '93': '93px',
        '113': '113px',
        '125': '125px',
        '120': '120px',
      },
    },
  },
};

然后修改组件中的类名:

{randomWidthArray.map((width: string, idx: number) => {
  return <div key={idx} className={`h-[19px] bg-[#D5D5D5] w-${width}`}></div>;
})}

内容的提问来源于stack exchange,提问作者Sanya21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:45:24