当前位置:首页 > 科技  > 软件

从 Ant Design 中,学一手复杂组件交互的优秀实践

来源: 责编: 时间:2024-05-16 09:06:35 190观看
导读我们在学习的时候遇到的 Demo 经常都是比较简单的,但是一旦到了实践工作中,数据和功能就开始变得复杂了。这个时候许多小伙伴就不知道咋处理了,他可能会把组件写的非常庞大。不利于维护。我们可以在 antd 中,学习一手最佳

sSM28资讯网——每日最新资讯28at.com

我们在学习的时候遇到的 Demo 经常都是比较简单的,但是一旦到了实践工作中,数据和功能就开始变得复杂了。这个时候许多小伙伴就不知道咋处理了,他可能会把组件写的非常庞大。不利于维护。sSM28资讯网——每日最新资讯28at.com

我们可以在 antd 中,学习一手最佳实践,如何把复杂的组件转化为简单的组件。sSM28资讯网——每日最新资讯28at.com

例如我们有这样一个复杂交互需求。这是一个树结构与输入框结合的交互逻辑 Input + Tree。sSM28资讯网——每日最新资讯28at.com

sSM28资讯网——每日最新资讯28at.com

在 antd 中,这样的交互被封装成为了一个单独的子组件 TreeSelect。他的妙处就在于,当我们使用该组件时,不需要关注内部的复杂逻辑到底是如何处理的。sSM28资讯网——每日最新资讯28at.com

我们只需要关心的问题有三个,第一,Input 和 Tree 结构需要的初始化数据。sSM28资讯网——每日最新资讯28at.com

<TreeSelect   treeData={treeData}  defaultValue={}  placeholder="Please select"/>

placeholder 表示没有任何选中数据时,Input 中的提示信息。可以在组件内部给一个通用默认值,这样在大多数情况就不需要显示的传入了。sSM28资讯网——每日最新资讯28at.com

第二,Input 受控属性 value。sSM28资讯网——每日最新资讯28at.com

<TreeSelect   treeData={treeData}  value={}/>

第三,当内部有操作变化,并且需要告知外部时,所需要执行的钩子函数 onChange。sSM28资讯网——每日最新资讯28at.com

<TreeSelect   treeData={treeData}  onChange={}/>

很多时候,我们并不需要受控属性 value 。这是许多人在使用时可能会不太理解的地方。受控属性的目的是用于在父组件去控制 TreeSelect 的显示。但是其实我们可能只是需要从 onChange 中获取到当前选中的结果,然后将这个结果整合到接口参数中去提交表单。只有当 TreeSelect 中的交互结果,会影响到其他外部组件时,我们才会考虑使用受控组件。sSM28资讯网——每日最新资讯28at.com

因此,在使用时,我们需要考虑的是,利用 defaultValue 或者 value 去回显组件在初始化时的数据。sSM28资讯网——每日最新资讯28at.com

然后利用 onChange 获取得到最新的值即可。sSM28资讯网——每日最新资讯28at.com

这里比较有意思的是,当我们把目标关注到 Input 组件时,发现 Input 组件的核心属性也是这几个 defalutValue/value/onChange。sSM28资讯网——每日最新资讯28at.com

而 tree 组件的核心属性,也是这几个 defalutValue/value/onChange。sSM28资讯网——每日最新资讯28at.com

因此,我们可以基于这种思路,去封装复杂业务组件,让其使用起来变得非常简单。sSM28资讯网——每日最新资讯28at.com

例如,我们有一个配置项名为被选中的学员。在页面上我们使用一个列表来暂时选中结果列表。sSM28资讯网——每日最新资讯28at.com

sSM28资讯网——每日最新资讯28at.com

在该结果展示列表中,可以删除项。sSM28资讯网——每日最新资讯28at.com

当需要重新选中时,需要点开一个弹窗,然后弹窗中有一个完整的人员分页列表。sSM28资讯网——每日最新资讯28at.com

大家可以脑补一下。sSM28资讯网——每日最新资讯28at.com

我们可以把这一部分统一封装成一个 TreeSelect 那样的组件,命名为 PersonnelSelector,其中包括:展示结果的列表组件、弹窗组件、弹窗中的分页列表组件。sSM28资讯网——每日最新资讯28at.com

对于内部而言,构成非常的复杂。sSM28资讯网——每日最新资讯28at.com

但是对于外部而言,他的构成就非常简单,我们只需要通过 value/defaultValue 回显数据,并且通过 onChange 获取操作之后的最新选中值即可。sSM28资讯网——每日最新资讯28at.com

<PersonnelSelector   value={[{}, {}, {}]}  notallow={}/>

PersonnelSelector 就是我们封装的业务组件。sSM28资讯网——每日最新资讯28at.com

// 简化版代码function PersonnelSelector() {  const [selected, setSelected] = useState([])  const [open, setOpen] = useState(false)  const {list} = usePagination(api)  return (    <>      <Table dataSource={selected} />      <Modal show={open}>        <Table dataSource={list} />      </Modal>    </>  )}

总结

这是一种合理抽离子组件的方式,在复杂页面的交互中非常有用。把局部交互逻辑单独隔离到子组件中去,而不需要在父组件中去维护弹窗组件等逻辑的状态,从而让页面组件的代码保持简洁。sSM28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-88339-0.html从 Ant Design 中,学一手复杂组件交互的优秀实践

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 探索.NET中的定时器:选择最适合你的应用场景

下一篇: 怎么更好的使用Gradle?

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top