【发布时间】:2020-04-03 03:49:43
【问题描述】:
当我单击它们时,我试图在 3 个有条件渲染的组件之间进行转换。我试图通过使用react-transition-group 中的TransitionGroup 来实现这一点。这是我目前所拥有的:
<div className="transitionContainer">
<Transition in={this.state.validFiles && this.state.dotted} timeout={duration}>
{state => (
<>
{this.state.validFiles && this.state.dotted ? (
<div className={`col fade fade-${state}`} onClick={this._handleDotted}>
<DottedPortrait state={this.state} />
</div>
) : null}
</>
)}
</Transition>
<Transition in={this.state.validFiles && this.state.square} timeout={duration}>
{state => (
<>
{this.state.validFiles && this.state.square ? (
<div className={`col fade fade-${state}`} onClick={this._handleSquare}>
<SquaredPortrait state={this.state} />
</div>
) : null}
</>
)}
</Transition>
<Transition in={this.state.validFiles && this.state.line} timeout={duration}>
{state => (
<>
{this.state.validFiles && this.state.line ? (
<div className={`col fade fade-${state}`} onClick={this._handleLine}>
<LinePortrait state={this.state} />
</div>
) : null}
</>
)}
</Transition>
</div>
虽然此代码适用于每个条件渲染的进入状态,但退出动画并不是因为在转换组可以应用 exiting 和 exited 类之前卸载组件。解决这个问题的最佳方法是什么?
以下是这些组件的handle 函数:
handleValidFiles = () => {
console.log(this.state);
this.setState({
validFiles: true,
dotted: true,
square: false,
line: false
});
};
_handleDotted = () => {
console.log(this.state);
this.setState({
dotted: !this.state.dotted,
square: !this.state.square
});
};
_handleSquare = () => {
console.log(this.state);
this.setState({
square: !this.state.square,
line: !this.state.line
});
};
_handleLine = () => {
console.log(this.state);
this.setState({
line: !this.state.line,
dotted: !this.state.dotted
});
};
【问题讨论】:
-
不明白你的意思,看看这个codesandbox
-
@iamhuynq 谢谢。我认为沙箱工作的原因是因为您没有有条件地安装和卸载组件,这就是我正在努力解决的问题。我已经让进入动画在点击时工作,但退出动画不起作用,因为组件在退出类可以应用之前卸载。我想知道在转换完成后如何卸载,必须编写更多函数
标签: reactjs react-transition-group reactcsstransitiongroup