in packages/miniapp-runtime/src/hydrate.ts [26:108]
export function hydrate(node: Element | Text): MiniData {
if (!componentsAlias) {
// 初始化 componentsAlias
componentsAlias = getComponentsAlias();
}
if (!SPECIAL_NODES) {
// 初始化 SPECIAL_NODES
SPECIAL_NODES = hooks.call('getSpecialNodes')!;
}
const { nodeName } = node;
if (isText(node)) {
return {
[Shortcuts.Text]: node.nodeValue,
[Shortcuts.NodeName]: componentsAlias[nodeName]._num,
};
}
const data: MiniElementData = {
[Shortcuts.NodeName]: nodeName,
sid: node.sid,
};
if (node.uid !== node.sid) {
data.uid = node.uid;
}
if (!node.isAnyEventBinded() && SPECIAL_NODES.indexOf(nodeName) > -1) {
data[Shortcuts.NodeName] = `static-${nodeName}`;
if (nodeName === VIEW && !isHasExtractProp(node)) {
data[Shortcuts.NodeName] = PURE_VIEW;
}
}
const { props } = node;
for (const prop in props) {
const propInCamelCase = toCamelCase(prop);
if (
!prop.startsWith('data-') && // 在 node.dataset 的数据
prop !== CLASS &&
prop !== STYLE &&
prop !== ID &&
propInCamelCase !== CATCHMOVE
) {
data[propInCamelCase] = props[prop];
}
if (nodeName === VIEW && propInCamelCase === CATCHMOVE && props[prop] !== false) {
data[Shortcuts.NodeName] = CATCH_VIEW;
}
}
// Children
data[Shortcuts.Childnodes] = node.childNodes.filter(node => !isComment(node)).map(hydrate);
if (node.className !== '') {
data[Shortcuts.Class] = node.className;
}
const { cssText } = node;
if (cssText !== '' && nodeName !== 'swiper-item') {
data[Shortcuts.Style] = cssText;
}
hooks.call('modifyHydrateData', data);
const nn = data[Shortcuts.NodeName];
const componentAlias = componentsAlias[nn];
if (componentAlias) {
data[Shortcuts.NodeName] = componentAlias._num;
for (const prop in data) {
if (prop in componentAlias) {
data[componentAlias[prop]] = data[prop];
delete data[prop];
}
}
} else {
hooks.call('hydrateNativeComponentNode', node);
}
return data;
}