From f6da4b13b86327e1d9e9ab781dd091cf5a868879 Mon Sep 17 00:00:00 2001 From: Hraban Luyat Date: Fri, 30 Jan 2015 06:02:33 +0100 Subject: [PATCH 1/2] Discern new vs old style components through render By overloading createElement() for the ClassicComponentClass and creating a separate ReactClassicElement type, we can keep track of which calls to render() should create a ClassicComponent versus a new style Component. Useful for keeping the old API, which makes migration easier. --- react/react-0.13.0.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/react/react-0.13.0.d.ts b/react/react-0.13.0.d.ts index b5a1d14952..9ee1025410 100644 --- a/react/react-0.13.0.d.ts +++ b/react/react-0.13.0.d.ts @@ -17,6 +17,9 @@ declare module React { ref: string; } + interface ReactClassicElement

extends ReactElement

{ + } + interface ReactHTMLElement extends ReactElement {} interface ReactSVGElement extends ReactElement {} @@ -112,8 +115,10 @@ declare module React { interface TopLevelAPI { createClass(spec: ComponentSpec): ClassicComponentClass; + createElement

(type: ClassicComponentClass, props: P, ...children: ReactNode[]): ReactClassicElement

; createElement

(type: ComponentClass | string, props: P, ...children: ReactNode[]): ReactElement

; createFactory

(type: ComponentClass | string): ComponentFactory

; + render(element: ReactClassicElement

, container: Element, callback?: () => any): ClassicComponent; render(element: ReactElement

, container: Element, callback?: () => any): Component; unmountComponentAtNode(container: Element): boolean; renderToString(element: ReactElement): string; From 3d84b2d7f3505d43e155aba1659e038a24e8df35 Mon Sep 17 00:00:00 2001 From: Hraban Luyat Date: Fri, 30 Jan 2015 14:43:26 +0100 Subject: [PATCH 2/2] [react 0.13] Adapt unit tests to new classic API Allows to use the API with one less type cast. --- react/react-0.13.0-tests.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/react/react-0.13.0-tests.ts b/react/react-0.13.0-tests.ts index 26b2d4fb1e..18d4bcf4e8 100644 --- a/react/react-0.13.0-tests.ts +++ b/react/react-0.13.0-tests.ts @@ -42,7 +42,7 @@ var INPUT_REF: string = "input"; // Top-Level API // -------------------------------------------------------------------------- -var reactClass: React.ComponentClass = React.createClass({ +var reactClassicClass: React.ClassicComponentClass = React.createClass({ getDefaultProps: () => { return { hello: undefined, @@ -69,6 +69,8 @@ var reactClass: React.ComponentClass = React.createClass< } }); +var reactClass: React.ComponentClass = reactClassicClass; + class ModernComponent extends React.Component implements React.ChildContextProvider { constructor(props: Props, context: Context) { super(props, context); @@ -149,6 +151,11 @@ var isValid = React.isValidElement(reactElement); // true React.initializeTouchEvents(true); var domNode: Element = React.findDOMNode(component); +var reactClassicElement: React.ReactClassicElement; +reactClassicElement = React.createElement(reactClassicClass, props); +var classicComponent: React.ClassicComponent; +classicComponent = React.render(reactClassicElement, container); + // // React Elements // -------------------------------------------------------------------------- @@ -177,8 +184,6 @@ component.setState({ inputValue: "!!!" }); component.forceUpdate(); // classic -var classicComponent = >component; - var htmlElement: Element = classicComponent.getDOMNode(); var divElement: HTMLDivElement = classicComponent.getDOMNode(); var isMounted: boolean = classicComponent.isMounted();