首页 > 其他分享 >基于React和Ant Design的公用组件设计与封装

基于React和Ant Design的公用组件设计与封装

时间:2024-06-18 15:32:24浏览次数:10  
标签:React 封装 Button Ant Design 组件 import 页面

在现代前端开发中,React与Ant Design(以下简称AntD)是开发企业级应用的常用组合。公用组件的设计与封装对于提高开发效率、减少重复代码以及提升应用的可维护性至关重要。本文将围绕设计原则、组件拆分颗粒度、以及如何在React和AntD项目中进行公用组件的封装展开探讨。

一、设计原则

在设计公用组件时,应遵循以下几个原则:

  1. 单一职责原则(Single Responsibility Principle): 每个组件应该只负责一个功能,这样可以提高组件的复用性和可测试性。例如,一个按钮组件只负责渲染按钮,而不应该包含业务逻辑。

  2. 高内聚低耦合: 组件内部的代码应紧密相关,外部依赖尽量减少。高内聚意味着组件内部功能高度相关,低耦合则意味着组件之间的依赖关系越松散越好,便于独立开发和维护。

  3. 灵活性与扩展性: 组件设计应具有灵活性,可以通过props或context来配置不同的行为。同时应考虑到未来可能的扩展需求,预留扩展接口。

  4. 可重用性: 组件应具备通用性,能够在不同的业务场景中重复使用。尽量避免在组件中耦合具体的业务逻辑,以提高复用性。

二、组件拆分的颗粒度

组件拆分的颗粒度是指组件划分的细致程度。适当的颗粒度有助于提高组件的复用性和维护性。

  1. UI基础组件: 这些是最基础的、原子级别的组件,如按钮(Button)、输入框(Input)、标签(Tag)等。它们通常直接对应于AntD的组件,主要负责基本的UI呈现。

  2. 组合组件: 将基础组件组合起来形成更复杂的组件,例如表单(Form)、卡片(Card)、列表(List)等。这些组件通常包含多个基础组件,并在内部实现一些基本的业务逻辑。

  3. 业务组件: 这些组件直接与具体的业务逻辑相关,如用户信息展示卡片、订单详情等。业务组件通常是由多个基础组件和组合组件构成,并且包含一定的业务逻辑。

  4. 页面组件: 整个页面级别的组件,用于组织和展示一个完整的页面。页面组件通常由多个业务组件组成,负责页面的布局和整体逻辑。

三、公用组件的设计与封装

  1. 基础组件的封装: AntD提供了丰富的UI组件,但在项目中使用时,通常需要进行一些二次封装以满足具体需求。例如,可以对AntD的Button组件进行封装,以统一按钮的样式和行为:

    import React from 'react';
    import { Button as AntButton } from 'antd';
    
    const Button = ({ type = 'primary', ...props }) => (
      <AntButton type={type} {...props} />
    );
    
    export default Button;

     

  2. 组合组件的封装: 组合组件通常由多个基础组件构成,例如一个带搜索功能的表格组件:

    import React, { useState } from 'react';
    import { Table, Input } from 'antd';
    
    const SearchableTable = ({ dataSource, columns }) => {
      const [searchText, setSearchText] = useState('');
      const filteredData = dataSource.filter(item =>
        Object.keys(item).some(key => 
          String(item[key]).toLowerCase().includes(searchText.toLowerCase())
        )
      );
    
      return (
        <div>
          <Input 
            placeholder="Search..." 
            value={searchText}
            onChange={e => setSearchText(e.target.value)}
            style={{ marginBottom: 16 }}
          />
          <Table dataSource={filteredData} columns={columns} />
        </div>
      );
    };
    
    export default SearchableTable;

     

  3. 业务组件的封装: 业务组件往往涉及具体的业务逻辑,可以通过组合基础组件和组合组件来实现。例如一个用户信息卡片组件:

    import React from 'react';
    import { Card } from 'antd';
    import Button from './Button'; // 封装后的Button组件
    
    const UserInfoCard = ({ user }) => (
      <Card title="User Information" style={{ width: 300 }}>
        <p>Name: {user.name}</p>
        <p>Email: {user.email}</p>
        <Button onClick={() => alert('Edit User')}>Edit</Button>
      </Card>
    );
    
    export default UserInfoCard;

     

  4. 页面组件的封装: 页面组件通常是最高层级的组件,用于组织和展示一个完整的页面。可以将多个业务组件组合起来构成页面组件。例如,一个用户详情页面:

    import React from 'react';
    import UserInfoCard from './UserInfoCard';
    import OrderList from './OrderList'; // 假设已封装的订单列表组件
    
    const UserDetailPage = ({ user, orders }) => (
      <div>
        <UserInfoCard user={user} />
        <OrderList orders={orders} />
      </div>
    );
    
    export default UserDetailPage;

四、总结

在基于React和Ant Design的项目中,公用组件的设计与封装对于提高开发效率和代码质量至关重要。遵循单一职责原则、高内聚低耦合、灵活性与扩展性、可重用性等设计原则,合理确定组件的拆分颗粒度,并通过基础组件、组合组件、业务组件和页面组件的层次化封装,可以构建出高效、可维护的前端架构。在实际项目中,不断迭代和优化组件设计,将有助于进一步提升应用的用户体验和开发效率。

标签:React,封装,Button,Ant,Design,组件,import,页面
From: https://www.cnblogs.com/huangxingquan/p/18254457

相关文章

  • Ant-Design-Vue动态表头并填充数据
    AntDesignVue是一个企业级的VueUI组件库,它提供了一套非常丰富的组件来帮助开发者快速构建高质量的Vue应用。在使用Ant-Design-Vue时,如果你需要实现一个动态表头并填充数据的表格,你可以使用a-table组件来实现。以下是一个基本示例,展示如何使用a-table组件创建......
  • 硬件开发笔记(十九):Altium Designer 21软件介绍和安装过程
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139706278长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…硬件相关开发......
  • pydantic+openai+json: 控制大模型输出的最佳范式
    调用大模型已经是如今做ai项目习以为常的工作的,但是大模型的输出很多时候是不可控的,我们又需要使用大模型去做各种下游任务,实现可控可解析的输出。我们探索了一种和python开发可以紧密合作的开发方法。所有的代码都开源在了GitHub大模型输出是按照token逐个预测然后解码成......
  • antd table 滚动到指定行方法
    查了Ai给的方法是tableRef.current.scrollToRow(0);但是实际上用地antd3压根没有这个方法。分享一下我自己想的一个简答的办法。1、需要定位的行要有唯一的标识例如id。letdata=[{id:1},{id:2},{id:3},] 这个id是为了方便找......
  • 探索Semantic Kernel内置插件:深入了解ConversationSummaryPlugin的应用
    前言经过前几章的学习我们已经熟悉了SemanticKernel插件的概念,以及基于Prompts构造的SemanticPlugins和基于本地方法构建的NativePlugins。本章我们来讲解一下在SemanticKernel中内置的一些插件,让我们避免重复造轮子。内置插件SemanticKernel有非常多的预定义插件,作为......
  • ChatGPT讲React Fiber
    ReactFiber是React16引入的一个新的协调引擎(reconciliationengine),旨在提高React应用的性能和响应性。Fiber主要解决了React之前版本中的一些性能瓶颈,使得React能够更好地处理复杂和大型应用中的更新和渲染任务。什么是ReactFiberReactFiber是对React核心算法......
  • MVVM模式开发WinForm-ReactiveUI
    一、引言  谈到MVVM设计模式,首先让人想到的是WPF。没错,MVVM的概念是微软在2005年提出的,并首次将其应用到WPF中。最近非常火的Vue.js也是使用了MVVM的设计模式。MVVM设计模式的核心部分是DataBinding机制。顾名思义,其功能就是将Model的数据绑定到View层,并且将View层控件的变换绑......
  • Semantic-SAM: Segment and Recognize Anything at Any Granularity论文阅读笔记
    Motivation&Abs现有的结构限制了模型以端到端的方式预测多粒度分割mask;同时目前没有大规模的语义感知&粒度感知数据集,同时不同数据集之间语义和粒度的固有差异给联合训练工作带来了重大挑战。本文提出通用图像分割模型,能够以任何粒度分割识别任何内容,给一个点作为prompt能够生......
  • Ant-Design-Vue动态表头详细解释并填充数据
    AntDesignVue的a-table组件是构建数据表格的强大工具。动态表头意味着列的标题和属性(如排序、过滤等)可以在运行时确定,通常基于从服务器获取的数据结构。以下是详细解释如何实现动态表头并填充数据:1.准备数据源动态表头的数据源可能来自API的响应,该响应定义了表格的列结......
  • React中AntDesign upload组件 自定义请求将多个上传请求合并成一个并
    接口文档核心代码constImportPictureUpload=()=>{const[fileList,setFileList]=useState([])constonBeforeUpload=(file:any,fileList:any)=>{setFileList(fileList)returnfalse;}useEffect(()=>{if(......