如何使用顺风 css 进行页面转换并做出反应?

Posted

技术标签:

【中文标题】如何使用顺风 css 进行页面转换并做出反应?【英文标题】:How can I make page transitions using tailwindcss & react? 【发布时间】:2021-10-31 19:20:19 【问题描述】:

简单我有两个组件。主页和搜索。 在/ 主页上有一个搜索 svg。点击那个svg,我想显示/search。 我想要的过渡是从右到中的页面。并离开中心到右边。 我试过顺风@headlessui/react,但它对我不起作用。让我知道如何使用顺风实现这种效果。

import React from "react";
import  Transition  from "@headlessui/react";
import  useState  from "react";
import  Link  from "react-router-dom";

const SearchCategoryPage = () => 
  const [showSearchPage, setShowSearchPage] = useState(true);
  return (
    <Transition
      as="div"
      show=showSearchPage
      enter="transition-all duration-300"
      enterFrom="transform translate-x-full"
      enterTo="transform translate-x-0"
      leave="transition-all duration-300"
      leaveFrom="transform translate-x-0"
      leaveTo="transform translate-x-full"
      className="fixed bg-black text-white max-w-2xl mx-auto inset-0 z-40 overflow-y-scroll "
    >
      <Link onClick=() => setShowSearchPage(!showSearchPage) to="/">
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Aspernatur
        animi inventore accusantium incidunt deleniti, minima, molestiae libero
        consectetur eligendi, veniam iure eum repellendus. Accusamus, sapiente
        id, voluptatum assumenda sunt totam natus explicabo sit ipsam facere
        optio vitae fugit tempora hic. Id mollitia rerum accusamus accusantium.
        Nulla a nihil fugit aliquam provident porro! Sunt ducimus totam minima
        ipsam illo labore, asperiores animi nemo quo tempora tenetur
        perspiciatis aspernatur error, molestiae delectus consequatur sapiente
        exercitationem esse eaque, suscipit mollitia! Vel sit vitae id eos
        exercitationem? Id veritatis voluptatem facere mollitia, ab ipsum, atque
        voluptatum eos eius illo nam ea consequatur vel inventore?
      </Link>
    </Transition>
  );
;

export default SearchCategoryPage;

主页

          <Link to="/search">
            <img
              src=Search
              
              className="cursor-pointer"
            />
          </Link>

【问题讨论】:

【参考方案1】:

一种方法可能是:

const SearchCategoryPage = () => 
    const [showSearchPage, setShowSearchPage] = useState(true);
    const history = useHistory()
    return (
        <Transition
            as="div"
            appear=true //THIS will make the transition run everytime the component is rendered
            show=showSearchPage
            enter="transition-all duration-300"
            enterFrom="transform translate-x-full"
            enterTo="transform translate-x-0"
            leave="transition-all duration-300"
            leaveFrom="transform translate-x-0"
            leaveTo="transform translate-x-full"
            className="fixed bg-black text-white max-w-2xl mx-auto inset-0 z-40 overflow-y-scroll "
            afterLeave=() => history.push('/')
        >
            <button onClick=() => setShowSearchPage((prev) => !prev)>
                    Lorem...
            </button>
        </Transition>
    )

如您所见,我在 Transition 组件上添加了历史记录和 afterLeave 函数,并将链接更改为按钮(或任何具有 onClick 属性的东西都可以使用)。

这将首先触发离开动画,然后运行离开后的功能。

appear=true 是必要的,以便在每次渲染时触发过渡。

appear - 过渡是否应该在初始装载时运行。 - 无头 UI 文档

从 headless ui 结帐过渡道具 :) https://headlessui.dev/react/transition

【讨论】:

它正在工作,greta,但第二次我点击搜索图像时,它正在动画,但离开家时它工作正常。我想这是因为你提到的 afterLeave 。你能告诉我如何解决第二次点击问题吗?谢谢 我真的不明白这是什么问题。请改写预期的行为 当我在搜索 SVG 所在的/ 页面时。在第一次单击时,它会向右移动到中心,这很棒。点击lorem para 它会从中心向右移动。那也很棒。但是当我第二次点击搜索 SVG 时,它并没有转换或动画页面。它不是以动画为中心的权利。这是为什么呢? 那是因为showSearchPage的状态设置为false。修改为:afterLeave=()=&gt; setShowPage(true); history.push(“/“) 所以我应该把这个状态const [showSearchPage, setShowSearchPage] = useState(true);重新定位到父组件吗?

以上是关于如何使用顺风 css 进行页面转换并做出反应?的主要内容,如果未能解决你的问题,请参考以下文章

顺风 css 边距类未将边距应用于组件,做出反应

如何在 React 中使用 Tailwind CSS 来配置 Create React App? [关闭]

如何在顺风CSS中的条件上添加样式

如何在css模块中嵌套类并做出反应?

做出反应。如何添加 autoprefixer 包并进行配置?

在反应中使用顺风 css 为范围滑块添加自定义工具提示