From fa6e45ea4c2036a525e049a1a37c93be64a7b6a7 Mon Sep 17 00:00:00 2001 From: Steve Baker <_steve_@outlook.com> Date: Thu, 13 Nov 2014 18:30:05 +0100 Subject: [PATCH 1/3] allow calling component or element functions no arguments --- react/react-tests.ts | 2 +- react/react.d.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/react/react-tests.ts b/react/react-tests.ts index f0267d907..25185867e 100644 --- a/react/react-tests.ts +++ b/react/react-tests.ts @@ -104,4 +104,4 @@ var Timer = React.createClass({displayName: 'Timer', } }); -React.render(Timer(null), mountNode); \ No newline at end of file +React.render(Timer(), mountNode); \ No newline at end of file diff --git a/react/react.d.ts b/react/react.d.ts index 40522920f..32249bd34 100644 --- a/react/react.d.ts +++ b/react/react.d.ts @@ -4,7 +4,7 @@ // Definitions: https://github.com/borisyankov/DefinitelyTyped declare module "react" { -export = React; + export = React; } declare module React { @@ -50,11 +50,11 @@ declare module React { export interface ReactComponentFactory

{ - (properties: P, ...children: any[]): ReactComponentElement

; + (properties?: P, ...children: any[]): ReactComponentElement

; } export interface ReactElementFactory

{ - (properties: P, ...children: any[]): ReactDOMElement

; + (properties?: P, ...children: any[]): ReactDOMElement

; } export interface DomElement extends ReactElementFactory { From 64dcdb97023ca6571b825e5c4ffe30059983e113 Mon Sep 17 00:00:00 2001 From: Steve Baker <_steve_@outlook.com> Date: Thu, 13 Nov 2014 20:05:32 +0100 Subject: [PATCH 2/3] add convenience overload to getDOMNode --- react/react.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/react/react.d.ts b/react/react.d.ts index 32249bd34..f7e5f5387 100644 --- a/react/react.d.ts +++ b/react/react.d.ts @@ -117,6 +117,11 @@ declare module React { export interface DomReferencer { getDOMNode(): Element; + /** + * Use this overload to cast the returned element to a more specific type. + * Eg: var name = this.refs['name'].getDOMNode().value + */ + getDOMNode(): TElement; } export interface Component extends DomReferencer { From c7d900175e3b6a74e1a78d6049021bb60d9d6e10 Mon Sep 17 00:00:00 2001 From: Steve Baker <_steve_@outlook.com> Date: Thu, 13 Nov 2014 20:25:46 +0100 Subject: [PATCH 3/3] add factory test --- react/react-tests.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/react/react-tests.ts b/react/react-tests.ts index 25185867e..37380b23b 100644 --- a/react/react-tests.ts +++ b/react/react-tests.ts @@ -72,13 +72,23 @@ React.createClass(PropTypesSpecification); var mountNode: Element; -var HelloMessage = React.createClass({displayName: 'HelloMessage', +interface HelloMessageProps { + name: string; +} + +var HelloMessage = React.createClass({displayName: 'HelloMessage', render: function() { - return React.DOM.div(null, "Hello ", (>this).props.name); + return React.DOM.div(null, "Hello ", (>this).props.name); } }); -React.render(HelloMessage({name: "John"}), mountNode); +// This code - calling a component directly - is deprecated in v0.12 +// See http://fb.me/react-legacyfactory +React.render(HelloMessage({ name: "John" }), mountNode); + +// Create a factory instead +var HelloMessageFactory = React.createFactory(HelloMessage) +React.render(HelloMessageFactory({ name: "John" }), mountNode) var Timer = React.createClass({displayName: 'Timer', getInitialState: function() {