in packages/miniapp-react-dom/src/props.ts [78:130]
function setProperty(dom: Element, name: string, value: unknown, oldValue?: unknown) {
name = name === 'className' ? 'class' : name;
if (
name === 'key' ||
name === 'children' ||
name === 'ref'
) {
// skip
} else if (name === 'style') {
const { style } = dom;
if (isString(value)) {
style.cssText = value;
} else {
if (isString(oldValue)) {
style.cssText = '';
oldValue = null;
}
if (isObject<StyleValue>(oldValue)) {
for (const i in oldValue) {
if (!(value && i in (value as StyleValue))) {
setStyle(style, i, '');
}
}
}
if (isObject<StyleValue>(value)) {
for (const i in value) {
if (!oldValue || value[i] !== (oldValue as StyleValue)[i]) {
setStyle(style, i, value[i]);
}
}
}
}
} else if (isEventName(name)) {
setEvent(dom, name, value, oldValue);
} else if (name === 'dangerouslySetInnerHTML') {
const newHtml = (value as DangerouslySetInnerHTML)?.__html ?? '';
const oldHtml = (oldValue as DangerouslySetInnerHTML)?.__html ?? '';
if (newHtml || oldHtml) {
if (oldHtml !== newHtml) {
dom.innerHTML = newHtml;
}
}
} else if (!isFunction(value)) {
if (value == null) {
dom.removeAttribute(name);
} else {
dom.setAttribute(name, value as string);
}
}
}