Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. function createElement(tag, props = {}, ...children) {
  2. const element = document.createElement(tag);
  3. const listeners = [];
  4.  
  5. Object.keys(props).forEach((key) => {
  6. if (key.slice(0, 2) === 'on') {
  7. const event = key.slice(2).toLowerCase();
  8. element.addEventListener(event, props[key]);
  9. listeners.push(() => element.removeEventListener(event, props[key]));
  10. } else if (key === 'ref') {
  11. props.ref(element);
  12. } else {
  13. element[key] = props[key];
  14. }
  15. });
  16.  
  17. children.forEach((node) => {
  18. if (typeof node === 'string' || typeof node === 'number') {
  19. element.appendChild(document.createTextNode(node));
  20. } else {
  21. element.appendChild(node);
  22. if (node.destroy && typeof node.destroy === 'function') {
  23. listeners.push(node.destroy);
  24. }
  25. }
  26. });
  27.  
  28. element.destroy = () => listeners.forEach(removeEventListener => removeEventListener());
  29.  
  30. return element;
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement