From c60838de084c61b8b6ec1e29a4b01b52cded41f6 Mon Sep 17 00:00:00 2001 From: Cheng Lou Date: Thu, 31 Oct 2013 21:10:19 -0400 Subject: [PATCH 1/3] split add-ons into subsections In preparation for documenting `classSet` add-on. --- _config.yml | 5 + docs/09-addons.md | 202 +------------------------- docs/09.1-animation.md | 99 +++++++++++++ docs/09.2-form-input-binding-sugar.md | 113 ++++++++++++++ 4 files changed, 219 insertions(+), 200 deletions(-) create mode 100644 docs/09.1-animation.md create mode 100644 docs/09.2-form-input-binding-sugar.md diff --git a/_config.yml b/_config.yml index 7e26caf0..2ad77dcc 100644 --- a/_config.yml +++ b/_config.yml @@ -53,6 +53,11 @@ nav_docs_sections: title: Tooling Integration - id: addons title: Add-ons + subitems: + - id: animation + title: Animation + - id: form-input-binding-sugar + title: Form Input Binding Sugar - id: examples title: Examples - title: Reference diff --git a/docs/09-addons.md b/docs/09-addons.md index 30bacadc..26edf99f 100644 --- a/docs/09-addons.md +++ b/docs/09-addons.md @@ -4,207 +4,9 @@ title: Add-ons layout: docs permalink: addons.html prev: tooling-integration.html -next: examples.html +next: animation.html --- `React.addons` is where we park some useful utilities for building React apps. **These should be considered experimental** but will eventually be rolled into core or a blessed utilities library. -## CSS Animation and Transitions - -`ReactTransitions` is an easy way to perform CSS transitions and animations when a React component enters or leaves the DOM. `ReactTransitions` is inspired by the excellent [ng-animate](http://www.nganimate.org/) library. - -### Getting Started - -`ReactTransitionGroup` is the interface to `ReactTransitions`. This is a simple element that wraps all of the components you are interested in animating. Here's an example where we fade list items in and out. - -```javascript{22-24} -/** @jsx React.DOM */ - -var ReactTransitionGroup = React.addons.TransitionGroup; - -var TodoList = React.createClass({ - getInitialState: function() { - return {items: ['hello', 'world', 'click', 'me']}; - }, - handleAdd: function() { - var newItems = - this.state.items.concat([prompt('Enter some text')]); - this.setState({items: newItems}); - }, - handleRemove: function(i) { - var newItems = this.state.items; - newItems.splice(i, 1) - this.setState({items: newItems}); - }, - render: function() { - var items = this.state.items.map(function(item, i) { - return ( -
- {item} -
- ); - }.bind(this)); - return ( -
-
- - {items} - -
- ); - } -}); -``` - -In this component, when a new item is added `ReactTransitionGroup` it will get the `example-enter` CSS class and the `example-enter-active` CSS class added in the next tick. This is a convention based on the `transitionName` prop. - -You can use these classes to trigger a CSS animation or transition. For example, try adding this CSS and adding a new list item: - -```css -.example-enter { - opacity: 0.01; - transition: opacity .5s ease-in; -} - -.example-enter.example-enter-active { - opacity: 0.99; -} -``` - -You'll notice that when you try to remove an item `ReactTransitionGroup` keeps it in the DOM. If you're using an unminified build of React you'll see a warning that React was expecting an animation or transition to occur. That's because `ReactTransitionGroup` keeps your DOM elements on the page until the animation completes. Try adding this CSS: - -```css -.example-leave { - opacity: 0.99; - transition: opacity .5s ease-in; -} - -.example-leave.example-leave-active { - opacity: 0.01; -} -``` - -### Disabling Animations - -You can disable animating `enter` or `leave` animations if you want. For example, sometimes you may want an `enter` animation and no `leave` animation, but `ReactTransitionGroup` waits for an animation to complete before removing your DOM node. You can add `transitionEnter={false}` or `transitionLeave={false}` props to `ReactTransitionGroup` to disable these animations. - -### Rendering a Different Component - -By default `ReactTransitionGroup` renders as a `span`. You can change this behavior by providing a `component` prop. For example, here's how you would render a `