react根据配置动态生成页面(react动态生成组件)

研究半天搞清楚如何根据json配置来生成页面,有了这个积木就好搭了,这个代码很简单,可以很好的理解核心。

参考的文档

//https://zhuanlan.zhihu.com/p/100708653

//https://baidu.github.io/amis/zh-CN/docs/start/getting-started

下面这个例子,首先是构造一个页面布局的对象,实际生产就可以使用json串解析获得,然后递归通过createelement生成组件,最后渲染到页面上。

import React from 'react';

import ReactDOM from 'react-dom/client';

import './index.css';

import App from './App';

import reportWebVitals from './reportWebVitals';

import { Col, Row } from 'antd';

import Video from "./VideoStory"

import Photo from "./PhotoStory"

const root = ReactDOM.createRoot(document.getElementById('root'));

var col11=createComponent("Col",{span:12},[createComponent("Video")]);

var col12=createComponent("Col",{span:12},[createComponent("Photo")]);

var row1=createComponent("Row",null,[col11,col12]);

var col21=createComponent("Col",{span:24},[createComponent("Photo")]);

var row2=createComponent("Row",null,[col21]);

function mapCodeToComponet(code){

switch(code){

case "Col":return Col;

case "Row":return Row;

case "Video": return Video;

case "Photo": return Photo;

default : return code;

}

}

function createComponent(name,props,children){

var info={};

info.type=name;

info.propertis=props;

info.children=children;

return info;

}

var uniqueKey=0;

function createTree(rootNode){

var children=[];

if(rootNode.children){

for (const item of rootNode.children) {

children.push(createTree(item))

}

}

rootNode.propertis={…{key:"key" uniqueKey },…rootNode.propertis};

return React.createElement(mapCodeToComponet(rootNode.type),rootNode.propertis,children);

}

var rootElement=createTree(createComponent("div",null,[row1,row2]));

root.render(rootElement);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年7月8日 下午2:17
下一篇 2024年7月8日 下午2:29

相关推荐

  • 肿瘤防治宣传周 – 为妇科肿瘤患者制定个体化人性化治疗方案,让美丽的生命如花绽放

    钱江晚报·小时新闻记者 张冰清 通讯员 孙美燕 金薇薇 世界卫生组织国际癌症研究机构(IARC)发布的2020年全球最新癌症负担数据显示,2020年共有443万女性死于癌症,其中乳…

    科研百科 2024年6月19日
    64
  • 智慧医院综合智能化系统设计方案(智慧医院综合智能化系统设计方案模板)

    摘要 智慧系统子系统众多,除了日常通用的智能化系统,还需考虑医院的行业特性。考虑到医院专用的智能化系统如:手术示教系统、时钟系统、医护人员对接系统等。医院信息系统如:医院信息系统(…

    2022年8月20日
    282
  • 办公网站模板

    办公网站模板是一种常用的网站模板,用于创建企业或组织的网站。它通常包括一个主页,一个导航栏,一个公司信息页面,一个产品页面和一个联系信息页面。 使用办公网站模板的好处在于它可以帮助…

    科研百科 2024年8月24日
    30
  • 广东省教育厅科研项目公示广东省教育厅科研项目公示

    广东省教育厅科研项目公示 为促进教育事业的发展,提高科研项目的质量和水平,广东省教育厅对近期立项的科研项目进行了公示。本次公示共有100项科研项目获得立项,其中包括重点研发计划项目…

    科研百科 2024年9月8日
    33
  • 瀑布型项目管理

    瀑布型项目管理是一种传统的项目管理方法,适用于大型项目或需要大量资源支持的项目。它基于瀑布模型,由一系列阶段组成,每个阶段都完成一项特定的任务,最后将成果交付给客户。瀑布型项目管理…

    科研百科 2024年5月29日
    73
  • 施工项目资金管理系统

    施工项目资金管理系统:确保施工项目顺利进行的关键 施工项目资金管理系统是现代施工企业必须拥有的最基本的系统之一。它能够有效地管理施工项目的资金流动,确保施工项目能够按时、按质完成。…

    科研百科 2024年12月27日
    0
  • 系统项目管理师怎么考

    系统项目管理师是一个重要的职业,负责管理和维护系统项目,确保项目按时、按质、按预算完成。如果你想成为系统项目管理师,需要通过考试获得相应的资格和证书。下面是一些关于系统项目管理师考…

    科研百科 2024年8月14日
    58
  • 在线办公网站哪个好(在线办公网站)

    在线办公网站:轻松实现办公室自动化 随着数字化时代的到来,越来越多的人开始选择在线办公网站来管理自己的工作。这些网站提供了各种工具和应用程序,可以帮助人们更加高效地完成工作任务,减…

    科研百科 2024年6月4日
    54
  • 工程项目管理和项目管理

    工程项目管理和项目管理 工程项目管理和项目管理是一个非常重要的概念,对于企业和个人来说都至关重要。工程项目管理和项目管理是指在一个特定时间段内,通过规划、组织、控制和监督一系列活动…

    科研百科 2024年5月26日
    78
  • 青葱守护跑路了吗

    青葱守护跑路了吗 青葱守护,一个曾经备受粉丝喜爱的男歌手,近日却跑路了吗?这个消息引起了许多人的关注和猜测。 据悉,青葱守护在很久以前就开始涉足音乐圈,并在网络上留下了不少经典作品…

    科研百科 2024年10月20日
    3