ReactCSSTransitionGroup:transitionAppear 不起作用
ReactCSSTransitionGroup: transitionAppear doesn't work
我正在尝试 appearance/disappearance 通知,但 transitionAppear
不起作用。我将项目(通知弹出窗口)添加到 onBlur
事件。 leave
时的动画运行流畅,而在 appear
时它只是突然出现而没有 transition
。最近在React,不骂人strongly:D
P.S.
如果我在 alert.js
中添加 ReactCSSTransitionGroup
-appear
可以,但是 leave
- 不行。
代码沙箱: https://codesandbox.io/s/l26j10613q
(在 CodeSandbox 上,我在 alert.js
中使用了 ReactCSSTransitionGroup
,因此 appear
有效,但 leave
— 无效)
alert.js:
export default class Alert extends Component {
render() {
const { icon, text } = this.props;
let classNames = "cards-wrapper-alert";
return (
<div className={classNames}>
<Card zIndex="2">
<Icon icon={icon} eClass="alert-message-icon"/>
<Label text={text} fw="fw-medium" fs="fs-14" fc="c-dark"/>
</Card>
</div>
);
}
}
alert.css:
.alert-appear {
max-height: 0;
overflow: hidden;
}
.alert-appear.alert-appear-active {
max-height: 80px;
transition: max-height 300ms ease-in-out;
}
.alert-leave {
max-height: 80px;
}
.alert-leave.alert-leave-active {
max-height: 0;
overflow: hidden;
transition: max-height 300ms ease-in-out;
}
我在input.js:
中做了什么
<ReactCSSTransitionGroup
component={this.prepareComponentForAnimation}
transitionName="alert"
transitionEnter={false}
transitionAppear={true}
transitionAppearTimeout={400}
transitionLeaveTimeout={400}>
{this.state.alert ?
<Alert icon={this.state.icon} text={this.state.text}/>
: null}
</ReactCSSTransitionGroup>
示例:
我不得不 change your code 重现您在 .gif 中显示的确切场景,方法是将 ReactCSSTransitionGroup
移动到 Input
组件。
阅读 docs 后,我发现这行解释了为什么您的 Alert
第一次出现时没有动画:
ReactCSSTransitionGroup provides the optional prop transitionAppear, to add an extra transition phase at the initial mount of the component.
这里发生的不是初始挂载。一旦在输入上有一些用户交互,就会设置 alert
状态。
因此,您问题的简单答案是您需要使用 enter
阶段,而不是 appear
阶段,因为我在上面发布了文档。
我正在尝试 appearance/disappearance 通知,但 transitionAppear
不起作用。我将项目(通知弹出窗口)添加到 onBlur
事件。 leave
时的动画运行流畅,而在 appear
时它只是突然出现而没有 transition
。最近在React,不骂人strongly:D
P.S.
如果我在 alert.js
中添加 ReactCSSTransitionGroup
-appear
可以,但是 leave
- 不行。
代码沙箱: https://codesandbox.io/s/l26j10613q
(在 CodeSandbox 上,我在 alert.js
中使用了 ReactCSSTransitionGroup
,因此 appear
有效,但 leave
— 无效)
alert.js:
export default class Alert extends Component {
render() {
const { icon, text } = this.props;
let classNames = "cards-wrapper-alert";
return (
<div className={classNames}>
<Card zIndex="2">
<Icon icon={icon} eClass="alert-message-icon"/>
<Label text={text} fw="fw-medium" fs="fs-14" fc="c-dark"/>
</Card>
</div>
);
}
}
alert.css:
.alert-appear {
max-height: 0;
overflow: hidden;
}
.alert-appear.alert-appear-active {
max-height: 80px;
transition: max-height 300ms ease-in-out;
}
.alert-leave {
max-height: 80px;
}
.alert-leave.alert-leave-active {
max-height: 0;
overflow: hidden;
transition: max-height 300ms ease-in-out;
}
我在input.js:
<ReactCSSTransitionGroup
component={this.prepareComponentForAnimation}
transitionName="alert"
transitionEnter={false}
transitionAppear={true}
transitionAppearTimeout={400}
transitionLeaveTimeout={400}>
{this.state.alert ?
<Alert icon={this.state.icon} text={this.state.text}/>
: null}
</ReactCSSTransitionGroup>
示例:
我不得不 change your code 重现您在 .gif 中显示的确切场景,方法是将 ReactCSSTransitionGroup
移动到 Input
组件。
阅读 docs 后,我发现这行解释了为什么您的 Alert
第一次出现时没有动画:
ReactCSSTransitionGroup provides the optional prop transitionAppear, to add an extra transition phase at the initial mount of the component.
这里发生的不是初始挂载。一旦在输入上有一些用户交互,就会设置 alert
状态。
因此,您问题的简单答案是您需要使用 enter
阶段,而不是 appear
阶段,因为我在上面发布了文档。