recompact
Version:
A set of React high order components based on Rx.
39 lines (31 loc) • 1.72 kB
JavaScript
;
exports.__esModule = true;
var _createEagerElementUtil = require('./utils/createEagerElementUtil');
var _createEagerElementUtil2 = _interopRequireDefault(_createEagerElementUtil);
var _isReferentiallyTransparentFunctionComponent = require('./isReferentiallyTransparentFunctionComponent');
var _isReferentiallyTransparentFunctionComponent2 = _interopRequireDefault(_isReferentiallyTransparentFunctionComponent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* React elements are lazily evaluated. But when a higher-order component
* renders a functional component, the laziness doesn't have any real benefit.
* createEagerElement() is a replacement for React.createElement() that checks
* if the given component is referentially transparent. If so, rather than
* returning a React element, it calls the functional component with the given
* props and returns its output.
*
* @static
* @category Utilities
* @param {ReactClass|ReactFunctionalComponent|String} type The type of component to render.
* @param {Object} [props] The props of the component.
* @param {ReactNode} [children] The children of the component.
* @returns {ReactElement} Returns a element.
* @example
*
* createEagerElement('div', {className: 'foo'});
*/
var createEagerElement = function createEagerElement(type, props, children) {
var isReferentiallyTransparent = (0, _isReferentiallyTransparentFunctionComponent2.default)(type);
var hasKey = props && Object.prototype.hasOwnProperty.call(props, 'key');
return (0, _createEagerElementUtil2.default)(hasKey, isReferentiallyTransparent, type, props, children);
};
exports.default = createEagerElement;