带有道具的JSX组件中的顺风无法在NextJS中渲染

z9smfwbn  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(176)

我认为在JSX组件中使用Tailwind传递一些道具来处理Tailwind属性会很好,因为我希望在不同的情况下使用。
但是,JSX组件中的Tailwind的某些样式不会呈现。
让我举一个例子。

// Flex.jsx
export function Flex({ gap, justify, items, children }) {
  const styles = [
    "flex",
    `gap-${gap || "0"}`,
    `justify-${justify || "center"}`,
    `items-${items || "center"}`,
    "bg-slate-300",
  ].join(" ");

  return <div className={styles}>{children}</div>;
}

我在上面制作的Flex组件在NextJS页面中不会呈现如下所示。例如,我给了一个间距值4,但是div标签之间没有间距。

// index.jsx
const Home: NextPage = () => {
  return (
    <div>
      <Flex gap={"4"} justify={"center"} items={"end"}>
        <div className="bg-green-300">Apple</div>
        <div className="w-32 h-32 bg-yellow-300">Banana</div>
        <div className="w-44 h-44 bg-red-300">Orange</div>
      </Flex>
    </div>
  );
};

我已经用标准的方式检查了它(即Tailwind内联样式),如下所示。在本例中,Tailwind样式被正确渲染,并且当我修改它们时,更改立即反映出来。

<div className="flex gap-2 justify-center items-end bg-slate-200">
  <div className="bg-green-300">Apple</div>
  <div className="w-32 h-32 bg-yellow-300">Banana</div>
  <div className="w-44 h-44 bg-red-300">Orange</div>
</div>

问题

你能告诉我为什么JSX组件中的Tailwind没有渲染吗?

当前行为

“苹果”、“香蕉”和“橙子”的div标签之间没有间隔。

预期行为

“Apple”、“Banana”和“橙子”的div标签之间存在间隙。

再现

***Node.js版本:**v18.12.0
***复制存储库:**针对此问题修改了Next.js + Tailwind CSS Example版本

步骤
1.安装并启动示例

git clone https://github.com/comverser/with-tailwindcss.git
cd with-tailwindcss
npm install
npm run dev

1.访问本地主机:3000

2sbarzqh

2sbarzqh1#

请查看以下文档:
如果使用字符串插值或将部分类名连接在一起,Tailwind将找不到它们,因此不会生成相应的CSS:
如果您像这样构建tailwind类:gap-${gap || "0"} Tailwind将无法在输出css文件中生成这些类。
您需要执行以下操作:

// index.jsx
<Flex gapClass={"gap-4"} justifyClass={"justify-center"} itemsClass={"items-end"}>
    <div className="bg-green-300">Apple</div>
    <div className="w-32 h-32 bg-yellow-300">Banana</div>
    <div className="w-44 h-44 bg-red-300">Orange</div>
</Flex>

...

// Flex.jsx
export function Flex({ gapClass, justifyClass, itemsClass, children }) {
    const styles = [
        "flex",
        gapClass || "gap-0",
        justifyClass || "justify-center",
        itemsClass || "items-center",
        "bg-slate-300",
    ].join(" ");

    return <div className={styles}>{children}</div>;
}

相关问题