【编者按】Facebook 2014年推出了开源框架React.js,《React:引领未来的用户界面开发框架》作为该领域的首作,由多位一线专家精心撰写,采用一个全程实例全面介绍和剖析了ReactReact.js 的方方面面。下面为该书的节选内容。
动画
动画可以让用户体验变得更加流畅与自然,而React 的TransitionGroup 插件配合CSS3 可以让我们在项目中整合动画效果的工作变得易如反掌。
通常情况下,浏览器中的动画都拥有一套极其命令式的API。你需要选择一个元素并主动移动它或者改变它的样式,以实现动画效果。这种方式与React 的组件渲染、重渲染方式显得格格不入,因此React 选择了一种偏声明式的方法来实现动画。
CSS 渐变组(CSS Transition Group)会在合适的渲染及重渲染时间点有策略地添加和移除元素的class,以此来简化将CSS 动画应用于渐变的过程。这意味着唯一需要你完成的任务就是给这些class 写明合适的样式。
间隔渲染以牺牲性能为代价提供了更多的扩展性和可控性。这种方法需要更多次的渲染,但同时也允许你为CSS 之外的内容(比如滚动条位置及Canvas 绘图)添加动画。
CSS 渐变组
看一下我们的示例程序——问卷制作工具——是如何在问卷编辑器中渲染问题列表的。
- <ReactCSSTransitionGrouptransitionName='question'>
- {questions}
- </ReactCSSTransitionGroup>
ReactCSSTransitionGroup 是一款插件,它在文件最顶部通过var ReactCSSTransitionGroup= React.addons.ReactCSSTransitionGroup; 语句被引入。
它会自动在合适的时候处理组件的重渲染,同时根据当前的渐变状态调整渐变组的class 以便实现组件样式的改变。
我们有一个贯穿全书的示例项目,一个问卷制作工具,你可以在https://github.com/backstopmedia/bleeding-edge-sample-app 阅读全部源码。
给渐变class 添加样式
按照惯例,为元素添加transitionName='question' 意味着给它添加了4 个class:questionenter、question-enter-active、question-leave 及question-leave-active。当子组件进入或退出ReactCSSTransitionGroup 时,CSSTransitionGroup 插件会自动添加或移除这些class。
下面是问卷编辑器中使用到的渐变样式: