Last active
September 6, 2018 21:34
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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'; | |
} |
Author
linxlad
commented
Jul 17, 2017
•
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment