詳解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/zh-tw/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

發表回復

登錄後才能評論