JSX 的解析是在编译期完成的,这意味着试图在运行时生成 JSX ,需要把编译器搬到运行时,技术上并非做不到,但是没有必要。
好在作为 JS 的超集,JSX 同样拥有 JS 的灵活性,像这种 string => JSX.Element 的需求可以这样实现:
function AppComp(){
return This is AppComp
}
const componentRecords = (() => {
const componentMap = new Map();
const errCompGen = (info) => () => {info};
return (component) => {
if(typeof component === "string"){
return componentMap.get(component) || errCompGen(`渲染错误:${component}组件未注册`);
}
if(typeof component !== "function"){
return
}
componentMap.set(component.name, component);
}
})();
componentRecords(AppComp);
const strs = [
"AppComp",
"TestComp",
"AppComp",
];
return
{
strs.map((i) => {
const I = componentRecords(i);
return
})
}