React 动画
React.js 提供了两个附加组件方便我们定义动画,分别为 ReactTransitionGroup 和 ReactCSSTransitionGroup。ReactTransitionGroup 是低层次的 API,ReactCSSTransitionGoup 是高层次的 API (做了进一步的封装,使用上更加方便但也相应的没有那么灵活)。
ReactCSSTransitionGroup
使用该组件定义动画十分方便,将需要进行动画的组件由 ReactCSSTransitionGroup 包括起来,并定义相关的属性即可。
示例如下:
对于 ReactCSSTransitionGroup 下的每一个子组件,都需要指定一个 key 属性,即使其下只有一个子组件也需要指定 key 属性, React 通过该属性决定子组件进入、离开和保持在屏幕上的行为。
ReactCSSTransitionGroup 的本质是通过改变 CSS 类达到动画的效果,一系列的类名与 transitionName 有关,如指定了其值为 example 后,需定义如下的 CSS 类:
.example-enter:动画开始之前的CSS属性.example-enter.example-enter-active:动画结束时的CSS属性(由这两个属性就可以得出进厂动画).example-leave:组件离场时的初始CSS属性。.example-leave.example-leave-active:组件离场后的CSS属性。
示例如下(来自官方文档):
另外,ReactCSSTransitionGroup 还有一个 transitionAppear 属性,该属性在为 true 的情况下首次挂载会进行动画。
所改变的 CSS 类为:
example-appear.example-appear.example-appear-active
当然,如果你不想像上面那样命名 CSS,也可以自定义 CSS 名称(官方示例):
另一点需要注意的是,如果要使用该组件进行动画的话,ReactCSSTransitionGroup 必须先挂载在 DOM 上面才行,这一点也可以理解,当然,如果你设置了 transitionAppear={true} 就不需要预先挂载。
最后,还有两个属性:transitionEnter 和 transitionLeave ,都是用布尔值去赋值,分别定义进场和出场时是否进行动画。
ReactTransitionGroup
该组件在 react-addons-transition-group 中。
使用该组件有一系列生命周期函数,我看到的时候感觉十分熟悉(写过 iOS,十分类似)
-
componentWillAppear(callback)
-
componentDidAppear
-
componentWillEnter(callback)
-
componentDidEnter()
-
componentWillLeave(callback)
-
componentDidLeave()
这些函数都有一些特点:在
callback被调用之前会阻塞不尽兴下一步操作。另外跟ReactCSSTransitionGroup中所需要的CSS类名进行对照就可以发现其实是一一对应的,也不难想象ReactCSSTransitionGroup的实现方式。
既然 ReactTransitionGroup 是组件,则其当然会对应一些 DOM 元素,默认情况下,其渲染为 span,不过,你仍然可以进行进一步定制,通过设定 component 属性即可,其可以是 html 标签,也可以是其他自定义的组件,另外还有一个 className 属性,该值会被传递给被渲染的子组件。