react对antd中Select组件二次封装

简介: 本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。

见贤思齐焉,见不贤内自省

建立.js组件,在父组件中引入,传入自定义属性

import React from 'react';
import {
    Select } from 'antd';
import 'antd/dist/antd.css';
import '../styles/select.less';

const {
   Option} = Select;

class MSelect extends React.PureComponent {
   
    constructor(props) {
   
        super(props);
        this.state = {
   }
    }
    //父级传入字段默认值
    static defaultProps = {
   
        title:"",
        options:[],
    }
    render() {
   
    //keyField  唯一key
    //valueField 指定当前选中的条目
    //titleField 当前项对应的label
    //options  options数组
        let {
    title,keyField,valueField,titleField,options, ...rest } = this.props;
        return (
            <div className="select">
                {
   title&&<p className="select-title">{
   title}</p>}
                {
   options.length>0&&<Select {
   ...rest}>
                    {
   options.map((item)=>{
   
                        return <Option key={
   keyField?item[keyField]:(item?.title||item)} value={
   valueField?item[valueField]:(item?.title||item)}>{
   titleField?item[titleField]:(item?.title||item)}</Option>
                    })}
                </Select>}
            </div>
        )
    }
}

export default MSelect;

less:


.search .select .ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
   
    width: 200px;
}

.select{
   
    display: flex;
    flex-direction: row;
    align-items: center;
    padding-bottom: 10px;
    .ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{
   
        height: 28px;
        line-height: 28px;
    }
    .ant-select-single:not(.ant-select-customize-input) .ant-select-selector{
   
        width: 200px;
        height: 28px;
    }
    //options配置中的多选 可输入 select option 的css
    .ant-select-show-search .ant-select-selector{
   
        width: 200px;
        min-height: 28px;
        // height: 28px;
        border-radius: 6px;
    }
    .ant-select-show-search .ant-select-selector .ant-select-selection-item{
   
        height: 20px;
        line-height: 20px;
        border-radius: 6px;
    }
    &-title{
   
        padding: 0;
        margin: 0;
        min-width: 105px;
        text-align: right;
    }
    &-title-input{
   
        padding: 0;
        margin: 0;
        min-width: 90px;
        text-align: right;
    }
}

使用:

在组件中引入,让后使用

 <MSelect
      title={
   `${
     item.title}:`}
      showArrow={
   true}
      value={
   this.state[`${
     item.keyName}`]}
      onChange={
   (e) => {
    this.inputName(`${
     item.keyName}`, e) }}
      options={
   item.keyAndValueList}
      keyField="key"
      valueField="key"
      titleField="value"
      dropdownMatchSelectWidth={
   true} //官方自带属性 
></MSelect>

数据格式:

keyAndValueList :[
    {
    value: "xx管理", key: 0 }, 
    {
    value: "xxx管理", key: 1 }, 
    {
    value: "xxx管理", key: 2 }
]

属性都是通过 …rest 解构赋值的形式来给到MSelect组件的

<Select {
   ...rest}></Select>

在这里插入图片描述

目录
相关文章
|
2月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
170 68
|
2月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
151 67
|
2月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
160 62
|
4月前
|
前端开发
React 中高阶组件的原理是什么?
React 中高阶组件的原理是什么?
152 57
|
4月前
|
前端开发
在 React 中使用高阶组件时,如何避免命名冲突?
在 React 中使用高阶组件时,如何避免命名冲突?
129 56
|
4月前
|
移动开发 前端开发 JavaScript
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
164 30
|
4月前
|
移动开发 前端开发 UED
React 音频音量控制组件 Audio Volume Control
在现代Web应用中,音频播放功能不可或缺。React以其声明式编程和组件化开发模式,非常适合构建复杂的音频音量控制组件。本文介绍了如何使用HTML5 `&lt;audio&gt;`元素与React结合,实现直观的音量控制系统,并解决了常见问题如音量范围不合理、初始音量设置及性能优化等,帮助开发者打造优秀的音频播放器。
155 27
|
4月前
|
编解码 前端开发 开发者
React 图片组件样式自定义:常见问题与解决方案
在 React 开发中,图片组件的样式自定义常因细节问题导致布局错乱、性能损耗或交互异常。本文系统梳理常见问题及解决方案,涵盖基础样式应用、响应式设计、加载状态与性能优化等,结合代码案例帮助开发者高效实现图片组件的样式控制。重点解决图片尺寸不匹配、边框阴影不一致、移动端显示模糊、加载失败处理及懒加载等问题,并总结易错点和最佳实践,助力开发者提升开发效率和用户体验。
142 22
|
4月前
|
移动开发 前端开发 开发者
React 音频播放控制组件 Audio Controls
本文介绍了如何使用React构建音频播放控制组件,涵盖HTML5 `&lt;audio&gt;`标签和React组件化思想的基础知识。针对常见问题如播放状态管理、进度条更新不准确及跨浏览器兼容性,提供了详细的解决方案和代码示例。同时,还总结了易错点及避免方法,如确保音频加载完成再操作、处理音频错误等,帮助开发者实现稳定且功能强大的音频播放器。
168 11
|
4月前
|
移动开发 前端开发 UED
React 音频进度条组件 Audio Progress Bar
在现代Web开发中,音频播放功能不可或缺。使用React构建音频进度条组件,不仅能实现播放控制和拖动跳转,还能确保代码的可维护性和复用性。本文介绍了如何利用HTML5 `&lt;audio&gt;`标签的基础功能、解决获取音频时长和当前时间的问题、动态更新进度条样式,并避免常见错误如忘记移除事件监听器和忽略跨浏览器兼容性。通过这些方法,开发者可以打造高质量的音频播放器,提升用户体验。
133 6