import { Component as IComponent, VNode } from '@t/ui'; import { shallowEqual } from '@/utils/common'; import { rerender } from './renderer'; export abstract class Component implements IComponent { props: T; state: R; refs: Record; vnode!: VNode; constructor(props: T) { this.props = props; this.state = {} as R; this.refs = {}; } setState(state: Partial) { const newState = { ...this.state, ...state }; if (!shallowEqual(this.state, newState)) { this.state = newState; rerender(this); } } abstract render(): VNode; }