Merge pull request #3571 from hraban/react-classic-component

[react 0.13] Discern new vs old style components through render
This commit is contained in:
Masahiro Wakame
2015-02-04 22:35:33 +09:00
2 changed files with 13 additions and 3 deletions

View File

@@ -42,7 +42,7 @@ var INPUT_REF: string = "input";
// Top-Level API
// --------------------------------------------------------------------------
var reactClass: React.ComponentClass<Props, State, Context> = React.createClass<Props, State, Context>({
var reactClassicClass: React.ClassicComponentClass<Props, State, Context> = React.createClass<Props, State, Context>({
getDefaultProps: () => {
return <Props>{
hello: undefined,
@@ -69,6 +69,8 @@ var reactClass: React.ComponentClass<Props, State, Context> = React.createClass<
}
});
var reactClass: React.ComponentClass<Props, State, Context> = reactClassicClass;
class ModernComponent extends React.Component<Props, State, Context> implements React.ChildContextProvider<ChildContext> {
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<Props>;
reactClassicElement = React.createElement<Props>(reactClassicClass, props);
var classicComponent: React.ClassicComponent<Props, State, Context>;
classicComponent = React.render<Props, State>(reactClassicElement, container);
//
// React Elements
// --------------------------------------------------------------------------
@@ -177,8 +184,6 @@ component.setState({ inputValue: "!!!" });
component.forceUpdate();
// classic
var classicComponent = <React.ClassicComponent<Props, State, Context>>component;
var htmlElement: Element = classicComponent.getDOMNode();
var divElement: HTMLDivElement = classicComponent.getDOMNode<HTMLDivElement>();
var isMounted: boolean = classicComponent.isMounted();

View File

@@ -17,6 +17,9 @@ declare module React {
ref: string;
}
interface ReactClassicElement<P> extends ReactElement<P> {
}
interface ReactHTMLElement extends ReactElement<HTMLAttributes> {}
interface ReactSVGElement extends ReactElement<SVGAttributes> {}
@@ -112,8 +115,10 @@ declare module React {
interface TopLevelAPI {
createClass<P, S, C>(spec: ComponentSpec<P, S, C>): ClassicComponentClass<P, S, C>;
createElement<P>(type: ClassicComponentClass<P, any, any>, props: P, ...children: ReactNode[]): ReactClassicElement<P>;
createElement<P>(type: ComponentClass<P, any, any> | string, props: P, ...children: ReactNode[]): ReactElement<P>;
createFactory<P>(type: ComponentClass<P, any, any> | string): ComponentFactory<P>;
render<P, S>(element: ReactClassicElement<P>, container: Element, callback?: () => any): ClassicComponent<P, S, any>;
render<P, S>(element: ReactElement<P>, container: Element, callback?: () => any): Component<P, S, any>;
unmountComponentAtNode(container: Element): boolean;
renderToString(element: ReactElement<any>): string;