我遇到了下面的noob问题,试图动态分配tailwind类给react组件。
我在tailwind.config.js
中扩展了主题颜色,如下所示:
...
theme: {
extend: {
colors: {
blueGray: {
50: '#f6f9f9',
100: '#e4f1f8',
200: '#c2e0f0',
300: '#91c0db',
400: '#5b9bbf',
500: '#4479a3',
600: '#385f87',
700: '#2d4768',
800: '#203049',
900: '#131d2f',
},
// OTHER COLORS
},
},
},
...
我的react组件如下所示:
import Draggable from 'react-draggable';
type SensorProps = {
name: string
color: string
}
export default function Sensor(props : SensorProps): JSX.Element {
return (
<Draggable
axis="both"
bounds="flow-canvas">
<div className={`border-${props.color}-400 bg-${props.color}-50 text-${props.color}-700`}>
<p> {props.name} </p>
</div>
</Draggable>
)
}
下面是一些示例化Sensor组件的示例
<Sensor name={"Water Level"} color={"blueGray"} />
<Sensor name={"Flow"} color={"mGreen"} />
问题是没有应用类,但是当我检查页面时,div有正确的类。
如果从以下位置切换:
<div className={`border-${props.color}-400 bg-${props.color}-50 text-${props.color}-700`}>
致:
<div className={`border-blueGray-400 bg-blueGray-50 text-blueGray-700`}>
它的工作原理:(
我已经在使用顺风JIT编译器
...
mode: 'jit',
purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'],
...
有什么建议吗?
3条答案
按热度按时间xqkwcwgp1#
tailwind编译器会在编译时解析你的代码,并且会解析那些在任何地方都没有使用过的purges类。你没有直接使用
border-blueGray-400
,所以它会把它当作一个没有使用过的类,并把它从捆绑包中删除以提高性能。在我看来,最好的解决方案是不传递
color
、size
等任意属性,而是传递className
属性。因此,您可以如下所示呈现组件:
在子组件中:
ars1skjm2#
你可以使用clsx这样的库有条件地呈现类,然后你的子组件将呈现:
如果你只想修改一两个属性,这不是一个好的解决方案。我建议你直接把顺风类作为 prop 传递,就像在另一个答案中提到的那样。
但是如果你有一些更复杂的逻辑,比如依赖于类的多个CSS属性,这个解决方案可能会很好。
yruzcnhs3#
现在您可以使用
通过在tailwindcss中使用安全列表类
解释
是否建议在
tailwind
中使用dynamic class
?不
通常不建议在
tailwind-css
中使用dynamic classes
,因为tailwind
使用tree-shaking
,即任何未在源文件中声明的类,都不会在输出文件中生成。因此,始终建议使用***完整类名***
根据文件
如果使用字符串插值或将部分类名连接在一起,Tailwind将找不到它们,因此不会生成相应的CSS
周围没有工作吗?
是
作为最后的手段,Tailwind提供安全列表课程。
安全列表是最后的手段,应该只在不可能扫描某些内容以查找类名的情况下使用。这种情况很少见,您应该几乎永远不需要此功能。
在您的示例中,您希望使用
100 500 700
色调。您可以使用正则表达式通过pattern
包含所有您想要的颜色,并相应地指定色调。在
tailwind.config.js
中额外:如何在
safelist
中自动设置所有顺风颜色