Match-id-49b2c6ccbd0cc263e411bbca72854bd2f69bbb73

This commit is contained in:
* 2022-01-26 16:51:22 +08:00 committed by *
parent fdc7a831d1
commit 42ad304f52
1 changed files with 8 additions and 5 deletions

View File

@ -37,7 +37,7 @@ 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);
@ -45,11 +45,14 @@ function buildElement(isClone, type, setting, ...children) {
let vNode = isClone ? type.belongClassVNode : getProcessingClassVNode(); let vNode = isClone ? type.belongClassVNode : getProcessingClassVNode();
if (setting != null) { if (setting != null) {
Object.keys(setting).forEach(k => { const keys = Object.keys(setting);
const keyLength = keys.length;
for(let i = 0; i < keyLength; i++) {
const k = keys[i];
if (isValidKey(k)) { if (isValidKey(k)) {
props[k] = setting[k]; props[k] = setting[k];
} }
}); }
if (setting.ref !== undefined && isClone) { if (setting.ref !== undefined && isClone) {
vNode = getProcessingClassVNode(); vNode = getProcessingClassVNode();
} }
@ -69,11 +72,11 @@ function buildElement(isClone, type, setting, ...children) {
// 创建Element结构体供JSX编译时调用 // 创建Element结构体供JSX编译时调用
export function createElement(type, setting, ...children) { export function createElement(type, setting, ...children) {
return buildElement(false, type, setting, ...children); return buildElement(false, type, setting, children);
} }
export function cloneElement(element, setting, ...children) { export function cloneElement(element, setting, ...children) {
return buildElement(true, element, setting, ...children); return buildElement(true, element, setting, children);
} }
// 检测结构体是否为合法的Element // 检测结构体是否为合法的Element