frontend-hamroun
Version:
A lightweight frontend JavaScript framework with React-like syntax
22 lines (21 loc) • 841 B
JavaScript
function arePropsEqual(oldProps, newProps) {
const oldKeys = Object.keys(oldProps).filter(k => k !== 'children');
const newKeys = Object.keys(newProps).filter(k => k !== 'children');
if (oldKeys.length !== newKeys.length)
return false;
return oldKeys.every(key => oldProps[key] === newProps[key]);
}
export function diff(oldNode, newNode) {
if (oldNode == null || newNode == null)
return oldNode !== newNode;
if (typeof oldNode !== typeof newNode)
return true;
if (typeof newNode === 'string' || typeof newNode === 'number')
return oldNode !== newNode;
if (newNode.type !== oldNode.type)
return true;
return !arePropsEqual(oldNode.props, newNode.props);
}
export function shouldComponentUpdate(oldProps, newProps) {
return !arePropsEqual(oldProps, newProps);
}