当在Next JS项目中动态添加类时,CSS Transition不起作用

8wtpewkr  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个简单的Next.js项目,运行Tailwind进行样式化,当我使用globals.css文件进行更复杂的CSS(不是Tailwind)样式化时,我遇到了一个问题。
这是一个更好的可视化https://codesandbox.io/p/sandbox/muddy-pine-hx86sf的代码沙盒,但本质上我试图在单击列表项时完成此transition
然而,在沙箱和我的Next.js本地开发中,这个过渡被简单地跳过,新的背景颜色被立即应用,而不是过渡。
我不确定我是否误解了CSS转换的工作原理,或者这与Next JS有关,或者缺乏对动态应用CSS到元素的理解。
1.尝试使用Firefox DevTools手动应用更改背景位置active-location-item的类,这导致转换工作。
1.尝试使用不同的CSS选择器都没有用(同样的问题没有过渡播放)。
1.已验证单击项目时是否正在DevTools中应用该类。
任何帮助在这方面将不胜感激!

pxiryf3j

pxiryf3j1#

问题是您在Modal中返回了一个新组件。每次状态改变时,const LocationView都会重新初始化。由于它在insideModal中,React将LocationView视为一个全新的组件,因为它在rerender上不是相同的引用,并且将重新挂载它,从而不会导致任何转换运行。
相反,直接返回JSX:

const { useState } = React;

const Modal = () => {
  const [activeLocation, setActiveLocation] = useState("");

  const handleLocationClick = () => {
    setActiveLocation("Example");
  };

  return (
    <div className="flex flex-col w-[600px]">
      <div className="flex flex-col text-hsr-dark font-medium grow">
        <ul className="list-disc list-inside">
          <li
            onClick={handleLocationClick}
            className={`${
              activeLocation === "Example" ? "active-location-item" : ""
            } location-item cursor-pointer text-2xl p-10 outline outline-2 outline-transparent  mb-1`}
          >
            Example
          </li>
        </ul>
      </div>
    </div>
  );
};

ReactDOM.createRoot(document.getElementById('app')).render(<Modal/>);

tailwind.config = {
  theme: {
    extend: {
      colors: {
        "hsr-dark": "#404040",
        "hsr-grey": "#BFBFBF",
      },
    },
  },
};

个字符

相关问题