mcc*_*osa 6 javascript css sass css-animations reactjs
我有一个用于错误消息元素的 React 组件ErrorMessage,它要么返回带有子元素的 div 元素,要么返回null,以便将其从 DOM 中删除。
我很好奇是否有一种方法可以使用 CSS/React 来为这个元素从 DOM 中删除时设置动画?当它渲染良好时我可以制作动画。
这里有一个CodeSandBox来测试它。
这是我的SASS
.ErrorMessages {
background: #ee4900;
color: #fff;
border: 0;
color: #fff;
padding: 0.8em 1em;
text-align: left;
font-size: 12px;
margin-top: 10px;
margin-bottom: 10px;
animation-duration: 0.5s;
animation-fill-mode: both;
animation-name: fadeInUp;
}
.ErrorMessages--Centered {
padding-top: 30px;
padding-right: 70px;
padding-left: 70px;
}
.ErrorMessages--fadeOut {
animation-name: fadeOutDown;
}
@keyframes fadeOutDown {
from {
opacity: 1;
max-height: 72px;
}
to {
opacity: 0;
padding: 0;
margin: 0;
max-height: 0;
transform: translate3d(0, 50px, 0);
}
}
@keyframes fadeInUp {
from {
opacity: 0;
padding: 0;
margin: 0;
max-height: 0;
transform: translate3d(0, 50px, 0);
}
to {
opacity: 1;
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我的 ErrorMessage 组件
import React from "react";
const ErrorMessage = props => {
let err = props.show ? (
<div className="ErrorMessages ErrorMessages--Centered">
<h4>{props.errorHeader}</h4>
<p>{props.errorMessage}</p>
</div>
) : null;
return err;
};
export default ErrorMessage;
Run Code Online (Sandbox Code Playgroud)
在 DOM 中呈现为
<div class="ErrorMessages ErrorMessages--Centered"></div>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
您可以在更改setTimeout时引发动画标志props.show。像这样的东西:
const ErrorMessage = props => {
const [show, setShow] = useState(props.show);
const [hide, setHide] = useState(!props.show);
const timeoutRef = useRef(null);
useEffect(() => {
if (props.show) {
setShow(true);
setHide(false);
clearTimeout(timeoutRef.current);
}
else {
setShow(false);
timeoutRef.current = setTimeout(() => setHide(true), props.delay || 1000);
}
}, [props.show]);
/* unmount cleanup */
useEffect(() => () => clearTimeout(timeoutRef.current), []);
let err = !hide ? (
<div className={'ErrorMessages ErrorMessages--Centered' + (show ? '' : ' ErrorMessages--fadeOut')}>
<h4>{props.errorHeader}</h4>
<p>{props.errorMessage}</p>
</div>
) : null;
return err;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11242 次 |
| 最近记录: |