Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function createElement(tag, props = {}, ...children) {
- const element = document.createElement(tag);
- const listeners = [];
- Object.keys(props).forEach((key) => {
- if (key.slice(0, 2) === 'on') {
- const event = key.slice(2).toLowerCase();
- element.addEventListener(event, props[key]);
- listeners.push(() => element.removeEventListener(event, props[key]));
- } else if (key === 'ref') {
- props.ref(element);
- } else {
- element[key] = props[key];
- }
- });
- children.forEach((node) => {
- if (typeof node === 'string' || typeof node === 'number') {
- element.appendChild(document.createTextNode(node));
- } else {
- element.appendChild(node);
- if (node.destroy && typeof node.destroy === 'function') {
- listeners.push(node.destroy);
- }
- }
- });
- element.destroy = () => listeners.forEach(removeEventListener => removeEventListener());
- return element;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement