Skip to content

Instantly share code, notes, and snippets.

@linxlad
Last active September 6, 2018 21:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save linxlad/bce1a0a50be777a389fad23508b79f38 to your computer and use it in GitHub Desktop.
Save linxlad/bce1a0a50be777a389fad23508b79f38 to your computer and use it in GitHub Desktop.
Helper to check for: Component vs Element, Class vs Functional and Component DOM vs Composite Element.
/**
* Helper to check for:
* Component vs Element
* Class vs Functional
* Component DOM vs Composite Element
*/
import React from 'react';
export function isClassComponent(component) {
return (
typeof component === 'function'
&& !!component.prototype.isReactComponent
);
}
export function isFunctionComponent(component) {
return (
typeof component === 'function' &&
String(component).includes('return React.createElement')
);
}
export function isReactComponent(component) {
return !!(isClassComponent(component) || isFunctionComponent(component));
}
export function isElement(element) {
return React.isValidElement(element);
}
export function isDOMTypeElement(element) {
return isElement(element) && typeof element.type === 'string';
}
export function isCompositeTypeElement(element) {
return isElement(element) && typeof element.type === 'function';
}
@linxlad
Copy link
Author

linxlad commented Jul 17, 2017

    console.log(['isClassComponent', isClassComponent(component)]);
    console.log(['isFunctionComponent', isFunctionComponent(component)]);
    console.log(['isReactComponent', isReactComponent(component)]);
    console.log(['isElement', isElement(component)]);
    console.log(['isDOMTypeElement', isDOMTypeElement(component)]);
    console.log(['isCompositeTypeElement', isCompositeTypeElement(component)]);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment