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