javascript - 在 Qwik 中动态分配类别

标签 javascript tailwind-css qwik

我是 Qwik 新手,并尝试有条件地从导航栏组件中的项目中添加/删除类。复杂的是我正在使用 tailwind 并且我想有条件地添加/删除 tailwind 类(使用自定义动画),但它似乎没有效果。我读过有关使用 clsx 在 React 中执行类似操作的内容,但这似乎在 Qwik 中不可用。有没有办法动态添加 tailwind 类,或者我怎样才能达到相同的结果?

组件

import { $, component$, useStore } from '@builder.io/qwik';
import { Link } from '@builder.io/qwik-city';

export const Navigation = component$(() => {

  const baseClass = "py-2 bg-white text-black w-[100px]";

  const menuItems = useStore([
    { label: "Home", value: "/", class: baseClass },
    { label: "About", value: "/about", class: baseClass },
    { label: "Contact Us", value: "/contact", class: baseClass },
  ]);

  const fadeout = $((num: number) => {
    menuItems.forEach((ele, i) => {
      if(i < num && !ele.class.includes("animate-fadeout")) {
      ele.class = baseClass + " animate-fadeout";
      }
    })
  });

  const fadein = $((num: number) => {
    menuItems.forEach((ele, i) => {
      if(i < num && ele.class.includes("animate-fadeout")) {
      ele.class = baseClass + " animate-fadein";
      }
    })
  });

  return (
    <div class="flex flex-col space-y-2 py-2 bg-slate-500">
      {menuItems.map((item, index) => (
        <Link className={item.class} key={index} onMouseOver$={() => fadeout(index)} onMouseOut$={() => fadein(index)} href={item.value}>{item.label}</Link>
      ))}
    </div>
  )
});

tailwind.config.js

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'],
  theme: {
    extend: {
      keyframes: {
        fadein: {
          '0%': { transform: 'translateY(-175%)', opacity: '0'},
          '10%': { transform: 'translateY(-150%)', opacity: '1'},
          '50%': { transform: 'translateY(0)'}
        },
        fadeout: {
          '50%': { transform: 'translateY(-175%)', opacity: '0'},
          '40%': { transform: 'translateY(-150%)', opacity: '1'},
          '0%': { transform: 'translateY(0)'}
        }
      },
      animation: {
        fadeout: 'fadeout 1s ease-in-out 1',
        fadein: 'fadein 1s ease-in-out 1',
      }
    },
  },
  plugins: [],
};

最佳答案

您在调用 useStore 时缺少 {deep: true} 作为选项。这将使信号正常工作。

另请查看qwik-transition如果你想做这样的转换。

此外,你不能使用 :hover 来实现你想要的吗?

最后,我会制作一个 MenuItem 组件$,而不是在导航中组合所有内容。

关于javascript - 在 Qwik 中动态分配类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75727342/

相关文章:

javascript - 单击按钮将 HTML div 内容导出为 pdf

tailwind-css - 顺风 CSS : Is there a way to target next sibling?

reactjs - 为 ReactJS 应用导入图像的问题

qwik - 如何在 Qwik 中渲染 child ?

reactjs - 如果可能,如何将 MUI 与 Qwik 框架一起使用?

javascript - 跳转到 anchor + 执行 ajax + 在一个函数中打开 jquery-ui Accordion 选项卡

javascript - css 在 chrome 中加载背景图像,但在 firefox 中不加载

javascript - React Native 将图像保存到特定位置

ruby-on-rails - 颜色不适用于 TailwindCSS on Rails

reactjs - 使用 Qwik 与 NextJS