Match-id-43f11e22f0d968145c3c3c94eaa5c2be1ef41e0b
This commit is contained in:
parent
978e25be73
commit
c08ff1ef54
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
import { Hook, Reducer, Ref } from '../../../horizon/src/renderer/hooks/HookType';
|
import { Hook } from '../../../horizon/src/renderer/hooks/HookType';
|
||||||
import { ModifyHooks, ModifyProps, ModifyState } from '../utils/constants';
|
import { ModifyHooks, ModifyProps, ModifyState } from '../utils/constants';
|
||||||
import { VNode } from '../../../horizon/src/renderer/vnode/VNode';
|
import { VNode } from '../../../horizon/src/renderer/vnode/VNode';
|
||||||
import { ClassComponent, FunctionComponent } from '../../../horizon/src/renderer/vnode/VNodeTags';
|
import { ClassComponent, FunctionComponent } from '../../../horizon/src/renderer/vnode/VNodeTags';
|
||||||
|
@ -119,26 +119,20 @@ export function parseAttr(rootAttr: any) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseHooks(hooks: Hook<any, any>[]) {
|
export function parseHooks(hooks: Hook<any, any>[], getHookInfo) {
|
||||||
const result: IAttr[] = [];
|
const result: IAttr[] = [];
|
||||||
const indentation = 0;
|
const indentation = 0;
|
||||||
hooks.forEach(hook => {
|
hooks.forEach(hook => {
|
||||||
const { hIndex, state } = hook;
|
const hookInfo = getHookInfo(hook);
|
||||||
// 不同 hook 的 state 有不同属性,根据是否存在该属性判断 hook 类型
|
if (hookInfo) {
|
||||||
// 采用这种方式是因为要拿到需要的属性值,和后续触发更新,必然要感知 hook 的属性值
|
const {name, hIndex, value} = hookInfo;
|
||||||
// 既然已经感知了属性,就不额外添加属性进行类型判断了
|
parseSubAttr(value, indentation, name, result, hIndex);
|
||||||
if ((state as Reducer<any, any>).trigger) {
|
|
||||||
if ((state as Reducer<any, any>).isUseState) {
|
|
||||||
parseSubAttr((state as Reducer<any, any>).stateValue, indentation, 'state', result, hIndex);
|
|
||||||
}
|
|
||||||
} else if ((state as Ref<any>).current) {
|
|
||||||
parseSubAttr((state as Ref<any>).current, indentation, 'ref', result, hIndex);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function parseVNodeAttrs(vNode: VNode) {
|
export function parseVNodeAttrs(vNode: VNode, getHookInfo) {
|
||||||
const tag = vNode.tag;
|
const tag = vNode.tag;
|
||||||
if (tag === ClassComponent) {
|
if (tag === ClassComponent) {
|
||||||
const { props, state } = vNode;
|
const { props, state } = vNode;
|
||||||
|
@ -151,7 +145,7 @@ export function parseVNodeAttrs(vNode: VNode) {
|
||||||
} else if (tag === FunctionComponent) {
|
} else if (tag === FunctionComponent) {
|
||||||
const { props, hooks } = vNode;
|
const { props, hooks } = vNode;
|
||||||
const parsedProps = parseAttr(props);
|
const parsedProps = parseAttr(props);
|
||||||
const parsedHooks = parseHooks(hooks);
|
const parsedHooks = parseHooks(hooks, getHookInfo);
|
||||||
return {
|
return {
|
||||||
parsedProps,
|
parsedProps,
|
||||||
parsedHooks,
|
parsedHooks,
|
||||||
|
|
Loading…
Reference in New Issue