当前位置: 首页 > article >正文

Antd的Select组件二次封装

提示:Select组件二次封装的目的,是为了在系统里面更方便、简洁地使用Select

这是官方写的使用方法是:

import React from 'react';
import { Select } from 'antd';

const handleChange = (value: string) => {
  console.log(`selected ${value}`);
};

const App: React.FC = () => (
  <>
    <Select
      defaultValue="lucy"
      style={{ width: 120 }}
      onChange={handleChange}
      options={[
        { value: 'jack', label: 'Jack' },
        { value: 'lucy', label: 'Lucy' },
        { value: 'Yiminghe', label: 'yiminghe' },
        { value: 'disabled', label: 'Disabled', disabled: true },
      ]}
    />
  </>
);

export default App;

如果是在一个复杂的应用中,会有很多地方都会使用到Select组件的,而且每一个场景不同,需要设置不同的参数。

这样似乎很繁琐。现在需要对Select进行二次封装,符合自己的应用场景。

封装后的组件,只需要传入一个属性:config。

二次封装的组件命名为:DXSelect。

DXSelect组件默认设置一个宽度,放在style属性里面。例如: styles = { width: "200px" }

config属性包含了一下属性:

options:定义select的选项,作为必填参数;

styles:样式,便于修改样式。

otherProps:其他属性,作为组件的扩展属性吧,在不同场景中,需要设置不同的参数,除了styles和options,其他属性都放在otherProps里面。

现在先定义一下属性的数据类型,这样严谨一点:

interface optionItem {
    itemKey?: string,
    itemValue?: string
}
interface ConfigProps {
    options: optionItem[],// 下拉框选项
    styles?: object, // 宽度
    otherProps?: object, // 其他属性
}
interface Props {
    config: ConfigProps
}

组件代码为:

const DXSelect: React.FC<Props> = ({ config }) => {
    const { styles = { width: "200px" }, options, otherProps } = config
    return <Select style={styles} {...otherProps}>
        {
            options.map((item: any) => <Select.Option value={item.itemKey}>{item.itemValue}</Select.Option>)
        }
    </Select>
}

这样引入该组件:<DXSelect config={defaultConfig} />

defaultConfig定义为:

  const defaultConfig = {
    options: [
      { itemKey: "123", itemValue: "test" },
      { itemKey: "124", itemValue: "test4" }
    ],
  }

效果如图:
在这里插入图片描述
现在修改一下样式,就在styles属性添加新的样式,比如:

  const defaultConfig = {
    options: [
      { itemKey: "123", itemValue: "test" },
      { itemKey: "124", itemValue: "test4" }
    ],
    styles:{
      width:"100px"
    }
  }

修改的效果如下图:
在这里插入图片描述
其他的参数设置如下:

  const defaultConfig = {
    options: [
      { itemKey: "123", itemValue: "test" },
      { itemKey: "124", itemValue: "test4" }
    ],
    styles: {
      width: "100px"
    },
    otherProps: {
      allowClear: true,
      onChange: (value: string, option: any,) => {
        console.log("value", value, option)
      }
    }
  }

这就Select的二次封装。

组件已经发布到npm上,有兴趣的同学,可以体验一下:npm i duxin-design

原文地址:https://blog.csdn.net/xuelian3015/article/details/131713856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/37236.html

相关文章:

  • STM32 10个工程篇:1.IAP远程升级(五)
  • 【计算机网络】第三章 数据链路层(虚拟机与局域网)
  • ES6 Day01
  • 开源堡垒机Guacamole二次开发记录之一
  • java SE -- enum 的使用
  • 网络安全与防范
  • 使用组合模式实现权限验证的例子
  • 【数据分析 - 基础入门之pandas篇③】- pandas数据结构——DataFrame
  • 决策树(Decision Tree)
  • 【接口/性能测试】Jmeter引用 jar包的三种方式(详细)
  • 进程和线程的区别
  • Linux下软件安装的命令
  • 简化生活之让AI以指定格式输出
  • 添加gitee的SSH公钥
  • 山东农信:走好“三农”数字化转型的最后一公里
  • Android 生成pdf文件
  • 基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件
  • Spring中事务传播机制的理解与简单试用
  • 短视频抖音账号矩阵系统源码---功能架构示例1
  • 【开源技术分享】Java读写操作Mp3的库:MP3AGIC,使用MP3AGIC获取ID3v1值和获取ID3v2专辑封面和修改ID3v2封面图片等mp3信息