reactjs - ReactJS - 在 2 个不同的组件之间淡入淡出
问题描述
我试图弄清楚如何通过一个简单的 1 秒过渡在 2 个不同的组件之间淡入淡出。我玩过 SwitchTransition 和 CSSTransition 和 TransitionGroup ,但似乎没有什么适合我。看起来 SwitchTransition 是我正在寻找的东西,但我能找到的唯一示例它们只是换出文本而不是整个组件。
所以这是我的两个组件的代码,它们根据状态变量有条件地显示。每个组件都有一个按钮,用于交换状态变量值,因此它当前将在两者之间交换,但它看起来并不漂亮。
<div className="login col-md-6 mt-5 mx-auto">
{showLogin && (
<LoginForm
onLoginSubmit={onLoginSubmit}
email={email}
setEmail={setEmail}
password={password}
setPassword={setPassword}
showPasswordReset={showPasswordReset}
/>
)}
{showForgotPassword && (
<ForgotPasswordForm
onPasswordResetSubmit={onPasswordResetSubmit}
setShowForgotPassword={setShowForgotPassword}
/>
)}
</div>
解决方案
您可以首先使用 react-spring 为组件设置动画
import { animated, useTransition } from "react-spring";
然后在你的组件里面
const [showLogin, set] = useState(false);
const toggle = () => {
set(!showLogin);
};
const transitions = useTransition(showLogin, null, {
from: { position: "absolute", opacity: 0 },
enter: { opacity: 1 },
leave: { opacity: 0 }
});
然后你将渲染你的组件,确保替换div
为animated.div
<div className="login col-md-6 mt-5 mx-auto">
{transitions.map(({ item, key, props }) =>
item ? (
<LoginForm //animated.div
onLoginSubmit={onLoginSubmit}
email={email}
setEmail={setEmail}
password={password}
setPassword={setPassword}
showPasswordReset={showPasswordReset}
/>
) : (
<ForgotPasswordForm //animated.div
onPasswordResetSubmit={onPasswordResetSubmit}
setShowForgotPassword={toggle}
/>
)
)}
</div>
我做了一个简单的例子,你可以在这里查看
推荐阅读
- android - 如何使用“libsu”库(或 adb)在 Android Q 上安装拆分的 APK 文件?
- batch-file - 是否可以在没有管理的情况下使用 NET 命令启动和停止 MariaDB 服务?
- python - 将嵌套 for 循环迭代的结果存储在单个变量中:具有多个不同长度的列的表
- python - 我正在努力使用 tkinter 关闭一个简单的小部件
- python - Django user.save() 在列“is_superuser”上失败,不能为空
- elixir - 为什么我的 Enum.reduce 基于 Enum.all 的实现?返回一个空列表?
- python - 用星号屏蔽 SSN 的前五位数字
- c - 在 C 中创建字符串并将其传递给函数的最佳方法是什么?
- python - 尽管存在 Mac,Python pandas read_csv 返回 FileNotFoundError
- sql - postgresql - 将类似查询“分组”为子查询