自定义元素需手动监听属性变化并触发更新,通过 static get observedAttributes() 声明小写或 kebab-case 字符串属性,由 attributeChangedCallback 响应变更,其参数为字符串类型,首次初始化也会触发;视图更新需直接操作 DOM 或调用 render() 方法,避免在回调中修改自身属性以防循环;非字符串属性需自行解析,如布尔值按空字符串或"true"判断,JSON 用 try-catch 解析,数字用 Number() 转换。
自定义元素(Custom Elements)本身不内置 React 那样的状态驱动渲染机制,它依赖开发者手动监听属性变化并触发更新。关键在于利用 static get observedAttributes() 和 attributeChangedCallback 生命周期钩子。
在自定义元素类中,通过静态 getter 声明需要监听的属性名列表:
value、disabled、theme),不支持对象或函数等复杂值;user-id),不能是 camelCase;attributeChangedCallback。该回调会在属性被添加、移除、替换或重设时调用,接收属性名、旧值、新值三个参数:
disabled="",也会传入 "");null);React 的“重新渲染”对应到自定义元素,本质是同步更新内部 DOM 或触发局部重绘:
this.shadowRoot 或 this 下的子节点(例如更新文本、切换 class、增删子元素);render() 方法(推荐封装为可复用逻辑);requestAnimationFrame 或 setTimeout 延迟执行,避免频繁触发。当需要响应对象、布尔或数字等类型时,需自行解析:
"true" 表示 true,其他为 false;JSON.parse(newValue),注意捕获异常;Number(newValue) 或 parseInt 转换,检查是否为有效数值。