从零实现一套低代码(保姆级教程) --- 【11】实现Card卡片组件及属性样式配置

摘要

我们通过十个篇章,把组件列表,画布区,属性面板,样式面板,容器组件这五个主要模块实现出来了。

如果想继续添加组件,就按照之前的方式添加即可。对于数据录入这样的组件,或者一个按钮一个标签组件,这种很简单。对于容器组件,我会用简单的篇幅来说一下,比如本篇文章,主要就是讲解一下Card组件是如何实现的。

但是如果你上一篇对Form表单的实现已经掌握了的话,这一篇其实自己也能完成的。

如果你是第一次看到这一篇文章, 建议先看一下第一节内容:
从零实现一套低代码(保姆级教程) — 【1】初始化项目,实现左侧组件列表

OK,那我们就开始实现Card卡片组件了。

在这里插入图片描述

1.实现左侧卡片组件

我们只需要模仿Form表单组件的实现,先在component下新建一个card文件夹,实现card组件,先只写一段文本:


export default function Card() {return (<div>Card</div>)
}

在iconList中配置好图标名称后,在index.ts中导出。

同时在leftPart的index.tsx下,把容器组件的数组中新添一个:

  const collapseItems: CollapseProps['items'] = [{key: 'containerCom',label: '容器组件',// 新增一个card组件children: renderComponent(['Form', 'Card'])}];

这样我们就可以在左侧组件列表中看到Card组件了(后面如果再说容器组件的实现就不会重复这些了)。

在这里插入图片描述

2.实现卡片组件

OK,现在我们实现卡片组件。作为容器组件,依旧要从children里面拿到子元素并且展示,这一点和Form表单组件是一样的,甚至更加简单。

这里我们给Card组件一个默认的样式和标题。

import { Card as AntCard } from "antd"export default function Card(props: any) {const { children } = propsreturn (<div><AntCard title="默认标题" style={{width: '300px', height:'300px'}}>{children && children.map((item: any) => {return item})}</AntCard></div>)
}

在这里插入图片描述

如果Card组件可以接受children子节点,那么在mainPart中,我们就要修改一下onDropContainer方法了。

因为之前我们只考虑了Form表单的情况,现在我们要把Card组件也加进来。

  const onDropContainer = (com: ComJson) => {return (e: any) => {const dragCom = getComById(dragComId, comList)// 把Card组件的情况加进来if(['Form', 'Card'].includes(com.comType)) {// 其他代码}

这个时候,我们就可以朝Card组件中拖拽其他组件了。

在这里插入图片描述

3.实现Card组件的属性列表

首先我们来到antD的官网,看一下Card组件都具有什么属性。

在这里插入图片描述

然后我们选择一些,加入到我们的属性列表中。

在comAttribute文件夹下,新增一个cardAttribute文件,然后在attributeMap.ts进行引入。

import { ComAttribute } from "../attributeMap"
const cardAttribute: ComAttribute[] = [{label: '设置标题',value: 'caption',type: 'input'},{label: '鼠标移过时可浮起',value: 'hoverable',type: 'switch'},{label: '设置组件大小',value: 'size',type: 'select',options: [{value: 'default'},{value: 'small'}],defaultValue: 'middle'}
]export {cardAttribute
}

同时修改我们的组件,对属性进行接收:

import { Card as AntCard } from "antd"export default function Card(props: any) {const { children, caption, hoverable, size } = propsreturn (<div><AntCard size={size} hoverable={hoverable} title= {caption || "默认标题"} style={{width: '300px', height:'300px'}}>{children && children.map((item: any) => {return item})}</AntCard></div>)
}

这个时候,我们的Card组件就可以进行属性配置了。

在这里插入图片描述

4.实现Card组件的样式列表

同理,我们新增一个cardStyle.ts在comStyle文件夹下,同时在styleMap中引入:

import { Style } from "../styleMap"
const cardStyle: Style[] = [{label: '设置宽度',value: 'width',type: 'number'},{label: '设置高度',value: 'height',type: 'number'},{label: '背景颜色',value: 'backgroundColor',type: 'color'},{label: '边框宽度',value: 'borderWidth',type: 'number'},{label: '边框颜色',value: 'borderColor',type: 'color'},{label: '边框样式',value: 'borderStyle',type: 'select',options: [{value: 'solid',label: '实线'},{value: 'dotted',label: '点线'},{value: 'dashed',label: '虚线'}],defaultValue: 'solid'}
]export {cardStyle
}

在组件中接受一下即可:

import { Card as AntCard } from "antd"export default function Card(props: any) {const { children, caption, hoverable, size, comStyle } = propsreturn (<div><AntCardsize={size}hoverable={hoverable}title= {caption || "默认标题"}style={{width: '300px', height:'300px', ...comStyle}}>{children && children.map((item: any) => {return item})}</AntCard></div>)
}

现在,样式面板就已经完成了。

在这里插入图片描述

博主补充

对于容器类型组件,按照这个步骤去添加就行。基本所有的都一样,有特别的地方我会单独用一个篇章来说,例如表格容器,列表容器。

整体来说,这一篇主要是来演示如何再添加一个容器类型的组件,后面如果读者感兴趣,可以自己尝试去添加antD中的容器组件。

相关的代码提交在github上:
https://github.com/TeacherXin/XinBuilder2
commit: 第十一节: 实现Card卡片组件及属性样式配置

下一篇
从零实现一套低代码(保姆级教程) — 【12】实现左侧层级树并支持查看JSON

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/315469.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中的数据类型

目录 ! >>> ?: 输入&#xff1a; switch: 快捷键&#xff1a; 提交Gitee仓库&#xff1a; next和nextLine区别&#xff1a; 注意事项&#xff1a; 循环终止&#xff1a; 产生随机数&#xff1a; 比较字符串&#xff1a; 关闭方法&#xff1a; …

JavaWeb——前端之AjaxVue

6. 前后端交互 6.1 Ajax&#xff08;原生的&#xff09; 概念&#xff1a; Asynchronous JavaScript And XML&#xff08;异步的JavaScript和XML&#xff09; 作用&#xff1a; 数据交互&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据异步交…

如何快速搭建自己的外贸/跨境电商独立站?

外贸老鸟一定听过行业内某些大神通过运营外贸独立站获得成百上千封的询盘&#xff0c;看到别人每天询盘接到手软常常羡慕不已&#xff0c;再回头看看自己的网站&#xff0c;一年到头也收不到几个询盘。等到终于抽出时间下定决心要打造自己的外贸独立站接单平台&#xff0c;又常…

数据库攻防学习之Redis

Redis 0x01 redis学习 在渗透测试面试或者网络安全面试中可能会常问redis未授权等一些知识&#xff0c;那么什么是redis&#xff1f;redis就是个数据库&#xff0c;常见端口为6379&#xff0c;常见漏洞为未授权访问。 0x02 环境搭建 这里可以自己搭建一个redis环境&#xf…

从 0 到 1 实现 ReentrantLock

虽然本文的标题是从 0 到 1 实现 ReentrantLock &#xff0c;但是为了方便理解&#xff0c;我们先从一个问题出发&#xff1a;既然系统已经有 synchronized 关键字了&#xff0c;那么为什么还会出现 ReentrantLock 这种代码层面的锁? 这就要先回顾一下历史了&#xff1a;在 J…

2024年01月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年01月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

2023年12月Scratch等级考试(四级)真题试卷

2023年12月Scratch等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;24 总分数&#xff1a;100 选择题 第 1 题 单选题 Scratch运行下列程序&#xff0c;输入“abcdef”&#xff0c;程序结束后&#xff0c;变量“字符串”是&#xff1f;&#xff0…

2023年中国充电桩激增89万!但布局不够完善,提升潜力大

随着我国充电基础设施的快速发展&#xff0c;2023年的统计数据为我们描绘了一个令人振奋的画面&#xff1a;1-11月间&#xff0c;公共充电桩数量激增89万个&#xff0c;同比去年同期增速高达50%。私人桩的增长同样惊人&#xff0c;较2022年底增长242万个&#xff0c;同比去年同…

探秘HyperLogLog:Redis中的基数统计黑科技

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 探秘HyperLogLog&#xff1a;Redis中的基数统计黑科技 前言HyperLogLog简介基数和基数统计的重要性HyperLogLog的历史和革命性 HyperLogLog的工作原理哈希函数线性计数与对数计数HyperLogLog的核心算法…

Python 数据库(一):使用 mysql-connector-python 操作 MySQL 数据库

大家好&#xff0c;我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时&#xff0c;mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能&#xff0c;使您能够执行各种数据库操作&#xff0c;如连接数据库、执行查询和插入数据等。在本文…

DevOps成熟度评估模型

什么是DevOps 随着敏捷软件方法的广泛采用&#xff0c;以及IT基础设施即程序代码的管理方式的推广&#xff0c;DevOps也应运而生了。 DevOps 是通过人、流程和技术的有机整合&#xff0c;以协作、自动化、精益、度量和共享文化为指引&#xff0c;旨在建立一种可以快速交付价值…

1207. 大臣的旅费(dfs求树的直径/图论)

题目&#xff1a; 1207. 大臣的旅费 - AcWing题库 思路&#xff1a; dfs求树的直径。 代码&#xff1a; #include<iostream> #include<cstdio> #include<vector> using namespace std; const int N100100; struct Edge//边的id以及长度 {int id,w; };ve…