Match-id-fcb41f29c2d0ac83e94d1822a856dd5d45b3c9db
This commit is contained in:
parent
8bf49d834e
commit
558678d27b
|
@ -1,6 +1,6 @@
|
||||||
import { TYPE_COMMON_ELEMENT } from './JSXElementType';
|
import { TYPE_COMMON_ELEMENT } from './JSXElementType';
|
||||||
import { getProcessingClassVNode } from '../renderer/GlobalVar';
|
import { getProcessingClassVNode } from '../renderer/GlobalVar';
|
||||||
|
import { Source } from '../renderer/Types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vtype 节点的类型,这里固定是element
|
* vtype 节点的类型,这里固定是element
|
||||||
|
@ -9,7 +9,7 @@ import {getProcessingClassVNode} from '../renderer/GlobalVar';
|
||||||
* ref ref属性
|
* ref ref属性
|
||||||
* props 其他常规属性
|
* props 其他常规属性
|
||||||
*/
|
*/
|
||||||
export function JSXElement(type, key, ref, vNode, props, source) {
|
export function JSXElement(type, key, ref, vNode, props, source: Source | null) {
|
||||||
return {
|
return {
|
||||||
// 元素标识符
|
// 元素标识符
|
||||||
vtype: TYPE_COMMON_ELEMENT,
|
vtype: TYPE_COMMON_ELEMENT,
|
||||||
|
@ -27,12 +27,7 @@ export function JSXElement(type, key, ref, vNode, props, source) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function isValidKey(key) {
|
function isValidKey(key) {
|
||||||
const keyArray = [
|
const keyArray = ['key', 'ref', '__source', '__self'];
|
||||||
'key',
|
|
||||||
'ref',
|
|
||||||
'__source',
|
|
||||||
'__self',
|
|
||||||
];
|
|
||||||
return !keyArray.includes(key);
|
return !keyArray.includes(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,8 +41,8 @@ function mergeDefault(sourceObj, defaultObj) {
|
||||||
|
|
||||||
function buildElement(isClone, type, setting, children) {
|
function buildElement(isClone, type, setting, children) {
|
||||||
// setting中的值优先级最高,clone情况下从 type 中取值,创建情况下直接赋值为 null
|
// setting中的值优先级最高,clone情况下从 type 中取值,创建情况下直接赋值为 null
|
||||||
const key = (setting && setting.key !== undefined) ? String(setting.key) : (isClone ? type.key : null);
|
const key = setting && setting.key !== undefined ? String(setting.key) : isClone ? type.key : null;
|
||||||
const ref = (setting && setting.ref !== undefined) ? setting.ref : (isClone ? type.ref : null);
|
const ref = setting && setting.ref !== undefined ? setting.ref : isClone ? type.ref : null;
|
||||||
const props = isClone ? { ...type.props } : {};
|
const props = isClone ? { ...type.props } : {};
|
||||||
let vNode = isClone ? type.belongClassVNode : getProcessingClassVNode();
|
let vNode = isClone ? type.belongClassVNode : getProcessingClassVNode();
|
||||||
|
|
||||||
|
@ -73,8 +68,15 @@ function buildElement(isClone, type, setting, children) {
|
||||||
if (element && element.defaultProps) {
|
if (element && element.defaultProps) {
|
||||||
mergeDefault(props, element.defaultProps);
|
mergeDefault(props, element.defaultProps);
|
||||||
}
|
}
|
||||||
|
let src: Source | null = null;
|
||||||
|
if (setting?.__source) {
|
||||||
|
src = {
|
||||||
|
fileName: setting.__source.fileName,
|
||||||
|
lineNumber: setting.__source.lineNumber,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return JSXElement(element, key, ref, vNode, props, setting?.__source ?? null);
|
return JSXElement(element, key, ref, vNode, props, src);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建Element结构体,供JSX编译时调用
|
// 创建Element结构体,供JSX编译时调用
|
||||||
|
|
|
@ -59,7 +59,6 @@ export interface SuspenseState {
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Source = {
|
export type Source = {
|
||||||
columnNumber: number;
|
|
||||||
fileName: string;
|
fileName: string;
|
||||||
lineNumber: number;
|
lineNumber: number;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
import type {VNode} from '../Types';
|
import type { Source, VNode } from '../Types';
|
||||||
|
|
||||||
import { mergeDefaultProps } from './LazyComponent';
|
import { mergeDefaultProps } from './LazyComponent';
|
||||||
import {updateVNode, onlyUpdateChildVNodes, createFragmentVNode, createUndeterminedVNode} from '../vnode/VNodeCreator';
|
|
||||||
import {shallowCompare} from '../utils/compare';
|
|
||||||
import {
|
import {
|
||||||
TYPE_FRAGMENT,
|
updateVNode,
|
||||||
TYPE_PROFILER,
|
onlyUpdateChildVNodes,
|
||||||
TYPE_STRICT_MODE,
|
createFragmentVNode,
|
||||||
} from '../../external/JSXElementType';
|
createUndeterminedVNode,
|
||||||
|
} from '../vnode/VNodeCreator';
|
||||||
|
import { shallowCompare } from '../utils/compare';
|
||||||
|
import { TYPE_FRAGMENT, TYPE_PROFILER, TYPE_STRICT_MODE } from '../../external/JSXElementType';
|
||||||
import { markVNodePath } from '../utils/vNodePath';
|
import { markVNodePath } from '../utils/vNodePath';
|
||||||
|
|
||||||
export function bubbleRender() {}
|
export function bubbleRender() {}
|
||||||
|
|
||||||
export function captureMemoComponent(
|
export function captureMemoComponent(processing: VNode, shouldUpdate: boolean): VNode | null {
|
||||||
processing: VNode,
|
|
||||||
shouldUpdate: boolean,
|
|
||||||
): VNode | null {
|
|
||||||
const Component = processing.type;
|
const Component = processing.type;
|
||||||
// 合并 函数组件或类组件 的defaultProps
|
// 合并 函数组件或类组件 的defaultProps
|
||||||
const newProps = mergeDefaultProps(Component, processing.props);
|
const newProps = mergeDefaultProps(Component, processing.props);
|
||||||
|
|
|
@ -27,7 +27,7 @@ import {
|
||||||
TYPE_SUSPENSE,
|
TYPE_SUSPENSE,
|
||||||
} from '../../external/JSXElementType';
|
} from '../../external/JSXElementType';
|
||||||
import { VNode } from './VNode';
|
import { VNode } from './VNode';
|
||||||
import { JSXElement } from '../Types';
|
import { JSXElement, Source } from '../Types';
|
||||||
import { markVNodePath } from '../utils/vNodePath';
|
import { markVNodePath } from '../utils/vNodePath';
|
||||||
|
|
||||||
const typeLazyMap = {
|
const typeLazyMap = {
|
||||||
|
@ -105,7 +105,7 @@ export function createPortalVNode(portal) {
|
||||||
return vNode;
|
return vNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createUndeterminedVNode(type, key, props, source) {
|
export function createUndeterminedVNode(type, key, props, source: Source | null): VNode {
|
||||||
let vNodeTag = FunctionComponent;
|
let vNodeTag = FunctionComponent;
|
||||||
let isLazy = false;
|
let isLazy = false;
|
||||||
const componentType = typeof type;
|
const componentType = typeof type;
|
||||||
|
|
Loading…
Reference in New Issue