/// import React = require("react"); interface Props { hello: string; world?: string; foo: number; bar: boolean; } interface State { inputValue?: string; seconds?: number; } interface MyComponent extends React.CompositeComponent { reset(): void; } var props: Props = { hello: "world", foo: 42, bar: true }; var container: Element; var INPUT_REF: string = "input"; // // Top-Level API // -------------------------------------------------------------------------- var reactClass: React.ComponentClass = React.createClass({ getDefaultProps: () => { return { hello: undefined, world: "peace", foo: undefined, bar: undefined }; }, getInitialState: () => { return { inputValue: "React.js", seconds: 0 }; }, reset: () => { this.replaceState(this.getInitialState()); }, render: () => { return React.DOM.div(null, React.DOM.input({ ref: INPUT_REF, value: this.state.inputValue })); } }); var reactElement: React.ReactElement = React.createElement(reactClass, props); var reactFactory: React.Factory = React.createFactory(reactClass); var component: React.Component = React.render(reactElement, container); var unmounted: boolean = React.unmountComponentAtNode(container); var str: string = React.renderToString(reactElement); var markup: string = React.renderToStaticMarkup(reactElement); var notValid: boolean = React.isValidElement(props); // false var isValid = React.isValidElement(reactElement); // true React.initializeTouchEvents(true); // // React Elements // -------------------------------------------------------------------------- var type = reactElement.type; var elementProps: Props = reactElement.props; var key = reactElement.key; var ref: string = reactElement.ref; var factoryElement: React.ReactElement = reactFactory(elementProps); // // React Components // -------------------------------------------------------------------------- var displayName: string = reactClass.displayName; var defaultProps: Props = reactClass.getDefaultProps(); var propTypes: React.ValidationMap = reactClass.propTypes; // // Component API // -------------------------------------------------------------------------- var htmlElement: Element = component.getDOMNode(); var divElement: HTMLDivElement = component.getDOMNode(); var isMounted: boolean = component.isMounted(); component.setProps(elementProps); component.replaceProps(props); var compComponent: React.CompositeComponent = >component; var initialState: State = compComponent.state; compComponent.setState({ inputValue: "!!!" }); compComponent.replaceState({ inputValue: "???", seconds: 60 }); compComponent.forceUpdate(); var inputRef: React.HTMLComponent = compComponent.refs[INPUT_REF]; var value: string = inputRef.getDOMNode().value; var myComponent = compComponent; myComponent.reset(); // // PropTypes // -------------------------------------------------------------------------- var PropTypesSpecification: React.ComponentSpec = { propTypes: { optionalArray: React.PropTypes.array, optionalBool: React.PropTypes.bool, optionalFunc: React.PropTypes.func, optionalNumber: React.PropTypes.number, optionalObject: React.PropTypes.object, optionalString: React.PropTypes.string, optionalNode: React.PropTypes.node, optionalElement: React.PropTypes.element, optionalMessage: React.PropTypes.instanceOf(Date), optionalEnum: React.PropTypes.oneOf(["News", "Photos"]), optionalUnion: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.number, React.PropTypes.instanceOf(Date) ]), optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number), optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number), optionalObjectWithShape: React.PropTypes.shape({ color: React.PropTypes.string, fontSize: React.PropTypes.number }), requiredFunc: React.PropTypes.func.isRequired, requiredAny: React.PropTypes.any.isRequired, customProp: function(props: any, propName: string, componentName: string) { if (!/matchme/.test(props[propName])) { return new Error("Validation failed!"); } return null; } }, render: (): React.ReactHTMLElement => { return null; } }; // // Example from http://facebook.github.io/react/ // -------------------------------------------------------------------------- interface TimerState { secondsElapsed: number; } interface Timer extends React.CompositeComponent<{}, TimerState> { } var Timer = React.createClass({ displayName: "Timer", getInitialState: () => { return { secondsElapsed: 0 }; }, tick: () => { var me = this; me.setState({ secondsElapsed: me.state.secondsElapsed + 1 }); }, componentDidMount: () => { this.interval = setInterval(this.tick, 1000); }, componentWillUnmount: () => { clearInterval(this.interval); }, render: () => { var me = this; return React.DOM.div( null, "Seconds Elapsed: ", me.state.secondsElapsed ); } }); var mountNode: Element; React.render(React.createElement(Timer, null), mountNode);