详解Select组件

一、Select组件封装

在前端开发中,Select组件是一个经常用到的表单组件,它可以将一个列表进行展示,并提供下拉选择框进行选择。但是,每次都重新编写Select组件可能会浪费不必要的时间,于是我们可以将它进行封装,提高开发效率。

下面是一个基本的Select组件封装的示例:

import React from 'react';
import PropTypes from 'prop-types';

class MySelect extends React.Component {
  static propTypes = {
    options: PropTypes.arrayOf(PropTypes.shape({
      value: PropTypes.string,
      label: PropTypes.string,
    })).isRequired,
    onChange: PropTypes.func.isRequired,
    placeholder: PropTypes.string,
    value: PropTypes.string,
  }

  static defaultProps = {
    placeholder: '请选择',
    value: '',
  }

  handleChange = (event) => {
    this.props.onChange(event.target.value);
  }

  render() {
    const { options, placeholder, value } = this.props;
    return (
      
        {placeholder}
        {options.map((option) => (
          {option.label}
        ))}
      
    );
  }
}

在上述代码中,我们使用了React的class形式进行封装,并且使用了PropTypes进行类型校验。同时,我们将options、onChange、placeholder、value四个常用属性进行了封装,使得我们在使用的时候可以方便快捷地进行调用。

二、HookSelect组件

在React16.8版本之后,新增加了Hooks函数,我们可以使用Hooks函数进行数据和生命周期的管理。我们可以重新编写Select组件,使用Hooks函数进行封装。

下面是一个基本的HookSelect组件封装的示例:

import React, { useState } from 'react';
import PropTypes from 'prop-types';

function HookSelect(props) {
  const [value, setValue] = useState(props.value);

  function handleChange(event) {
    const newValue = event.target.value;
    setValue(newValue);
    props.onChange(newValue);
  }

  const { options, placeholder } = props;
  
  return (
    
      {placeholder}
      {options.map((option) => (
        {option.label}
      ))}
    
  );
}

HookSelect.propTypes = {
  options: PropTypes.arrayOf(PropTypes.shape({
    value: PropTypes.string,
    label: PropTypes.string,
  })).isRequired,
  onChange: PropTypes.func.isRequired,
  placeholder: PropTypes.string,
  value: PropTypes.string,
};

HookSelect.defaultProps = {
  placeholder: '请选择',
  value: '',
};

在上述代码中,我们使用了useState Hook函数进行状态管理,将value和setValue作为状态进行管理。同时我们也对props进行了类型校验和设置默认属性值。

三、Select组件距离顶部

在有些场景下,我们需要将Select组件固定在页面顶部,实现类似于select2的效果。但是,在antd的Select组件中,并没有提供类似于select2中fixed的属性。所以我们可以使用CSS的position属性和z-index属性来实现。

.select-wrapper {
  position: relative;
  z-index: 999;
}

.ant-select-dropdown {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 998;
}

以上就是一个基本的Select组件固定在顶部的样式设置示例。

四、Select组件怎么获取value

通过onChange事件获取到的值可以通过event.target.value获取,也可以通过state获取。

示例代码如下:

handleChange = (value) => {   // value为antd select组件的onChange回调参数
  this.setState({ value });
}

render() {
  const { value } = this.state;
  return (
    
      One
      Two
      Three
    
  );
}

五、Select组件的光标问题

在使用Select组件的时候,可能会遇到光标不可见或者错位的问题。此时我们可以通过添加autoComplete=”off”属性来解决这个问题。它会把浏览器默认的自动填充操作关闭掉,避免了Select组件的光标问题。


六、Antd Select组件

在React UI库Antd中,也提供了Select组件。下面是一个基本的Antd Select组件的示例:

import { Select } from 'antd';
const { Option } = Select;

function handleChange(value) {
  console.log(`selected ${value}`);
}


  Jack
  Lucy
  
    Disabled
  
  yiminghe

在上述代码中,我们可以通过defaultValue设置初始值,通过style属性设置组件样式,并且通过Option组件中的disabled属性来设置禁止选择的状态。

七、Select组件封装 vue3

在Vue3版本中,也可以对Select组件进行封装。下面是一个基本的Vue3 Select组件的示例:


  
    {{ placeholder }}
    {{ option.label }}
  



import { defineComponent, reactive } from 'vue';

export default defineComponent({
  props: {
    options: {
      type: Array,
      required: true,
      default: () => [],
    },
    onChange: {
      type: Function,
      required: true,
    },
    placeholder: {
      type: String,
      default: '请选择',
    },
    value: {
      type: String,
      default: '',
    },
  },

  setup(props) {
    const state = reactive(props);

    const handleChange = (event) => {
      const newValue = event.target.value;
      state.value = newValue;
      props.onChange(newValue);
    };

    return {
      handleChange,
    };
  },
});

在上述代码中,我们使用了Vue3中的defineComponent函数进行组件的定义,使用了reactive函数进行状态管理,将props和state进行了响应式绑定。同时也对props进行了类型校验和设置默认属性值。

八、Select组件的onchange

在原生的HTML元素中,我们可以通过onchange事件获取到被选中的选项的值。在Select组件中,也可以通过onChange事件获取到被选中的选项的值。下面是一个基本的使用示例:

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

render() {
  return (
    
      One
      Two
      Three
    
  );
}

在上述代码中,我们在Select组件中传递了一个handleChange函数,在函数中使用console.log打印出所选择的选项的值。

九、Select组件实现多选框

在一些场景下,我们可能需要使用Select组件实现多选框。此时,我们可以使用antd库提供的mode属性来实现多选框效果。

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

render() {
  return (
    
      One
      Two
      Three
    
  );
}

在上述代码中,我们在Select组件中传递了一个mode属性,将其设置为multiple,使其成为多选框。

十、Select组件加前置搜索图标选取

在一些场景下,我们需要给Select组件添加一个前置搜索图标,用于在列表中搜索所选择的选项。在antd的Select组件中,我们可以使用suffixIcon属性或者自定义渲染下拉箭头来实现前置搜索图标的添加。

import { SearchOutlined } from '@ant-design/icons';

const suffix = (
  
);


  One
  Two
  Three

在上述代码中,我们使用了ant-design/icons库中的SearchOutlined组件来作为搜索图标,并将其赋值给suffixIcon属性。同时,我们也可以通过自定义渲染下拉箭头来添加前置搜索图标。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/301703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-30 16:09
下一篇 2024-12-30 16:09

相关推荐

  • 使用SQL实现select 聚合查询结果前加序号

    select语句是数据库中最基础的命令之一,用于从一个或多个表中检索数据。常见的聚合函数有:count、sum、avg等。有时候我们需要在查询结果的前面加上序号,可以使用以下两种方…

    编程 2025-04-29
  • 如何修改ant组件的动效为中心

    当我们使用Ant Design时,其默认的组件动效可能不一定符合我们的需求,这时我们需要修改Ant Design组件动效,使其更加符合我们的UI设计。本文将从多个方面详细阐述如何修…

    编程 2025-04-29
  • Ant Design组件的动效

    Ant Design是一个基于React技术栈的UI组件库,其中动效是该组件库中的一个重要特性之一。动效的使用可以让用户更清晰、更直观地了解到UI交互的状态变化,从而提高用户的满意…

    编程 2025-04-29
  • 用mdjs打造高效可复用的Web组件

    本文介绍了一个全能的编程开发工程师如何使用mdjs来打造高效可复用的Web组件。我们将会从多个方面对mdjs做详细的阐述,让您轻松学习并掌握mdjs的使用。 一、mdjs简介 md…

    编程 2025-04-27
  • Spring MVC主要组件

    Spring MVC是一个基于Java语言的Web框架,是Spring Framework的一部分。它提供了用于构建Web应用程序的基本架构,通过与其他Spring框架组件集成,使…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论