type and props. Use type to determine if the given element is a text element.type, use either Document.createTextNode() or Document.createElement() to create the DOM element.Object.keys() to add attributes to the DOM element and set event listeners, as necessary.props.children, if any.Node.appendChild() to append the DOM element to the specified container.const renderElement = ({ type, props = {} }, container) => {
const isTextElement = !type;
const element = isTextElement
? document.createTextNode('')
: document.createElement(type);
const isListener = p => p.startsWith('on');
const isAttribute = p => !isListener(p) && p !== 'children';
Object.keys(props).forEach(p => {
if (isAttribute(p)) element[p] = props[p];
if (!isTextElement && isListener(p))
element.addEventListener(p.toLowerCase().slice(2), props[p]);
});
if (!isTextElement && props.children && props.children.length)
props.children.forEach(childElement =>
renderElement(childElement, element)
);
container.appendChild(element);
};
const myElement = { type: 'button', props: { type: 'button', className: 'btn', onClick: () => alert('Clicked'), children: [{ props: { nodeValue: 'Click me' } }] } }; renderElement(myElement, document.body);
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️