Skip to content

Instantly share code, notes, and snippets.

@kamescg
Created April 12, 2020 18:37
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 kamescg/a9f129e2b032e5ea434a0f22f4e284f7 to your computer and use it in GitHub Desktop.
Save kamescg/a9f129e2b032e5ea434a0f22f4e284f7 to your computer and use it in GitHub Desktop.
React Component Validation/Rendering
export function isClassComponent(component) {
return (
typeof component === 'export function' &&
!!component.prototype.isReactComponent
) ? true : false
}
export function isInlineFunctionComponent(component) {
return (
typeof component === 'function' &&
String(component).includes('createElement')
) ? true : false;
}
export function isFunctionComponent(component) {
return (
typeof component === 'export function' &&
String(component).includes('return React.createElement')
) ? true : false;
}
export function isReactComponent(component) {
return (
isClassComponent(component) ||
isFunctionComponent(component) ||
isInlineFunctionComponent(component)
) ? true : false;
}
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 === 'export function';
}
export default (component, props) => (
isReactComponent(component)
? React.createElement(component, props)
: isElement(component)
? React.cloneElement(component, props)
: null
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment