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年3月31日
    129
  • 师范生保研要有科研项目吗师范生保研要有科研项目吗

    作为一名师范生,了解科研项目对于保研的重要性是必要的。在当今社会,科研项目已成为师范生培养的重要组成部分。本文将探讨师范生保研需要掌握的科研项目技能,以及如何申请和参与科研项目。 …

    科研百科 2024年6月13日
    73
  • 英语中公司里职员的分类

    In today\’s corporate world, employees are classified into various categories based …

    科研百科 2024年10月25日
    0
  • 党建业务相融共促丨党建品牌培育与管理学习交流会(党建品牌与业务如何深度融合)

    为了更好的做好党建引领企业发展,党建促进企业做强,思想天下党支部于2022年9月30日开展“学习党的精神、引领企业发展”——党建品牌培育与管理学习交流会,在杨宋镇党委和党建品牌专家…

    科研百科 2023年10月3日
    124
  • excel在线协同开源

    excel在线协同开源: 让协作更高效 随着数字化时代的到来,工作方式也在不断地改变。在传统的工作方式中,人们需要将工作分解成一个个单独的任务,然后逐一完成。这种方式虽然可以让人们…

    科研百科 2024年10月21日
    0
  • 工程项目管理的纽带

    工程项目管理是一个非常重要的领域,涉及到许多不同的方面,包括项目规划、执行、控制和收尾。工程项目管理不仅仅是一项单纯的任务,而是与许多其他因素有关联的,这些因素构成了一个复杂的纽带…

    科研百科 2024年5月27日
    113
  • 开源oa办公系统有哪些

    开源oa办公系统有哪些 开源oa办公系统是指那些基于开源技术构建的办公软件,它们通常是由独立的开发者或企业自行开发,因此具有更高的可靠性和灵活性。以下是一些常见的开源oa办公系统:…

    科研百科 2024年11月16日
    0
  • 业务流程管理体系系统

    业务流程管理体系系统:企业运营的新希望 随着现代企业的快速发展,业务流程管理已经成为企业管理中不可或缺的一部分。业务流程管理体系系统是一种能够帮助企业有效地管理业务流程的软件系统,…

    科研百科 2024年8月21日
    60
  • 大学项目管理

    大学项目管理 大学项目管理是一个非常重要的领域,涉及到大学教育、研究和教学的各个方面。在项目管理中,大学需要确保项目的高效、可持续和高质量,以满足学生、教师和校友的需求。本文将探讨…

    科研百科 2024年5月26日
    90
  • 构建科学化制度化标准化智慧化党建工作体系(构建科学化制度化标准化智慧化党建工作体系)

    山东省济南市检察院党组书记、检察长 宋文娟   习近平总书记指出:“机关党的建设是机关建设的根本保证,必须从中央和国家机关严起、从机关党建抓起。”最高人民检察院党组强调,要把检察机…

    科研百科 2023年7月5日
    175