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

相关推荐

  • 销售合同管理软件

    销售合同管理软件 随着电子商务的发展和现代销售模式的转变,销售合同管理软件已经成为了现代销售过程中不可或缺的一部分。销售合同管理软件可以帮助销售人员更方便、更高效地管理销售合同,减…

    科研百科 2024年9月2日
    38
  • 灭世者成救世者?魔兽史上最邪恶的黑龙,却为了龙希尔自甘堕落

    大家好,这里是正惊游戏,我是爱吃瓜的正惊小弟。 死亡之翼作为魔兽4.0版本的最终大BOSS,差点毁灭艾泽拉斯大陆的灭世者,它一直都被玩家冠以史上最邪恶的黑龙之称。 在过去,不少人都…

    科研百科 2023年10月28日
    181
  • epc项目进度管理方案

    Epc项目进度管理方案 随着现代项目管理的不断发展,项目Epc(大型基础设施项目)已经成为项目管理中的重要组成部分。项目Epc通常涉及大量的时间和资源,因此,有效的进度管理至关重要…

    科研百科 2024年8月20日
    62
  • 工程管理专业软件

    工程管理专业软件 随着现代科技的不断发展,工程管理专业软件已经成为了现代项目管理中不可或缺的一部分。这些软件可以帮助管理人员更加高效地进行项目管理,提高项目的效率和质量,减少项目成…

    科研百科 2025年1月4日
    1
  • 安装项目管理软件

    安装项目管理软件 项目管理软件是现代项目管理中不可或缺的工具。它能够帮助我们有效地组织、计划、跟踪和控制项目进度、成本和风险。本文将介绍如何安装和使用一款优秀的项目管理软件,以便在…

    科研百科 2024年7月21日
    59
  • 探索者F4

    探索者F4探索者F4(MECH)首先从今天开始,我们就先来看看OPL由于《XE》的影响,目前看到的,LPL历史中曾经引起人们热议的其中一个战队,竟然有一位电竞明星的名字。这是LOL…

    科研百科 2024年11月26日
    1
  • 重庆市石柱县创新体制机制做大畜牧产业

       一是财政切块资金1.5亿元,推进财政补贴、农户自筹、公司分担1:3:6风险分担机制,老百姓养殖风险降低70%。Xh1   二是大力推行“公司+基地+农户…

    科研百科 2022年5月23日
    320
  • 襄阳市协同办公系统首获全国殊荣(襄阳统一身份认证平台)

    11月3日,在北京举行的2022(第五届)行业信息化技术创新发展峰会传来喜讯,由襄阳市大数据中心建设的襄阳市协同办公系统荣获政府类“2022信创应用优秀案例”。这是我市协同办公系统…

    科研百科 2023年12月6日
    131
  • 国自然是啥(国自然是国家级科研项目吗)

    国自然是指国家级科研项目,是中国政府通过《国家自然基金资助项目指南》来资助的科学研究项目。这些项目由政府机构、学术机构和企业赞助,旨在解决现实世界中的科学问题,推动科学技术的进步和…

    科研百科 2024年8月2日
    55
  • 青海河南县依托资源优势有机畜牧业“节节高”

      近年来,黄南藏族自治州河南蒙古族自治县积极调结构、转方式、提质量、增效益,在保护生态环境前提下,充分发挥资源优势,因地制宜、综合施策,大力推进有机畜牧业发展,不断取得新成效。X…

    科研百科 2022年5月17日
    346