这个简单的事情应该很容易完成,但是我要把它弄复杂。
我要做的就是动画化React组件的安装和卸载。到目前为止,这是我尝试过的方法,以及每种解决方案都不起作用的原因:
ReactCSSTransitionGroup
-我根本不使用CSS类,因为它全都是JS样式,所以这行不通。ReactTransitionGroup
-这个较低层的API很棒,但是它要求您在动画制作完成后使用回调,因此仅使用CSS过渡在此处无效。总会有动画库,这引出下一点:TransitionMotion
对于我需要的东西却非常混乱和过于复杂。left: -10000px
),但我宁愿不走这条路。我认为它很笨拙,并且我 希望 卸下我的组件,以便它们清理并不会弄乱DOM。我想要一些 易于 实现的东西。在安装时,为一组样式设置动画;卸载时,为一组相同(或另一组)样式设置动画。做完了 它还必须在多个平台上都具有高性能。
我在这里撞墙了。如果我缺少某些东西,并且有一种简单的方法可以做到,请告诉我。
这有点冗长,但是我使用了所有本机事件和方法来实现此动画。否ReactCSSTransitionGroup
,ReactTransitionGroup
等等。
我用过的东西
onTransitionEnd
事件如何运作
mounted
)和默认样式(opacity: 0
)来挂载元素componentDidMount
(componentWillReceiveProps
用于进一步更新)更改样式(opacity: 1
)并带有超时(以使其异步)。opacity: 0
),onTransitionEnd
然后从DOM中移除元素。继续循环。
查看代码,您会明白的。如果需要任何澄清,请发表评论。
希望这可以帮助。
class App extends React.Component{
constructor(props) {
super(props)
this.transitionEnd = this.transitionEnd.bind(this)
this.mountStyle = this.mountStyle.bind(this)
this.unMountStyle = this.unMountStyle.bind(this)
this.state ={ //base css
show: true,
style :{
fontSize: 60,
opacity: 0,
transition: 'all 2s ease',
}
}
}
componentWillReceiveProps(newProps) { // check for the mounted props
if(!newProps.mounted)
return this.unMountStyle() // call outro animation when mounted prop is false
this.setState({ // remount the node when the mounted prop is true
show: true
})
setTimeout(this.mountStyle, 10) // call the into animation
}
unMountStyle() { // css for unmount animation
this.setState({
style: {
fontSize: 60,
opacity: 0,
transition: 'all 1s ease',
}
})
}
mountStyle() { // css for mount animation
this.setState({
style: {
fontSize: 60,
opacity: 1,
transition: 'all 1s ease',
}
})
}
componentDidMount(){
setTimeout(this.mountStyle, 10) // call the into animation
}
transitionEnd(){
if(!this.props.mounted){ // remove the node on transition end when the mounted prop is false
this.setState({
show: false
})
}
}
render() {
return this.state.show && <h1 style={this.state.style} onTransitionEnd={this.transitionEnd}>Hello</h1>
}
}
class Parent extends React.Component{
constructor(props){
super(props)
this.buttonClick = this.buttonClick.bind(this)
this.state = {
showChild: true,
}
}
buttonClick(){
this.setState({
showChild: !this.state.showChild
})
}
render(){
return <div>
<App onTransitionEnd={this.transitionEnd} mounted={this.state.showChild}/>
<button onClick={this.buttonClick}>{this.state.showChild ? 'Unmount': 'Mount'}</button>
</div>
}
}
ReactDOM.render(<Parent />, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react-with-addons.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
问题内容: 我想在两个组件之间进行动画处理,第一个组件淡出并从DOM中删除,然后再将下一个组件添加到DOM中并淡入。否则,新组件将添加到DOM中并占用空间。旧组件已删除。您可以在这个小提琴中看到问题: http://jsfiddle.net/phepyezx/4 对于我来说,不可接受的解决方案是在转换为新组件之前用CSS隐藏原始组件,如下所示: http://jsfiddle.net/phepye
本文向大家介绍使用bat批处理来安装和卸载ASP组件,包括了使用bat批处理来安装和卸载ASP组件的使用技巧和注意事项,需要的朋友参考一下 我们在使用ASP进行网络编程的时候通常会用的一些组件,因为通过组件能够让我们很方便地进行一些复杂的操作,但是ASP默认并没有把所有的组件都集成,所以当我们需要用到某个组件的时候需要自行安装。今天就介绍一下通过批处理来安装和卸载ASP组件的方法。 假设我们要安装
准备一个安装文件图标和一个卸载文件图标,在 ; MUI 预定义常量 下面加入以下代码: !define MUI_ICON "eBook Workshop.ico" !define MUI_UNICON "un eBook Workshop.ico" 生成的安装文件和安装目录下面的卸载文件分别如下: 推荐一个制作图标文件的小软件:Iconlover(包含于 轻狂E书制作工具包 中,可以选择安装。)
问题内容: 我收到此错误: warning.js:33警告:无法在已卸载的组件上调用setState(或forceUpdate)。这是空操作,但它表明应用程序中发生内存泄漏。要解决此问题,请在componentWillUnmount方法中取消所有订阅和异步任务。 但是我没有使用componentWillUnMount方法。 我正在使用HOC来确保用户在访问其/ account路由之前已通过身份验证
更新时间:2019-02-28 15:19:40 库的安装需要指定对应的工程,修改工程里面的platformio.ini文件内容。 库的安装 选择工程 点击Project 在下拉菜单里面选择你的工程 打开platform.ini文件 方法一:通过Library详情页打开platformio.ini文件 方法二:通过Files文件菜单栏在workspace下面选择该工程文件夹下的plaformio.
安装与卸载 Compose 支持 Linux、macOS、Windows 10 三大平台。 Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。 Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。 $