react antd select 下拉框实现可选择可自由输入

19 篇文章 1 订阅
13 篇文章 1 订阅
import React from 'react';
import { Button, List, Avatar, Select } from "antd";
const fontSizeArr = [
  { value: 8 },
  { value: 10 },
  { value: 12 },
  { value: 13 },
  { value: 14 },
  { value: 16 },
  { value: 18 },
  { value: 20 },
  { value: 24 },
  { value: 28 },
  { value: 36 },
  { value: 48 },
  { value: 72 },
  { value: 144 },
  { value: 288 }
]

class Kulian extends React.Component {

  state = {
    newValue: [],
    record: [],
  }

  onChangeSelect = (value, index) => {
    const { record } = this.state;
    console.log('===============点击的value', value)
    record[index] = value || '';
    console.log('===============record', record,record.length,typeof record[0],record[0]);
    this.setState({ record });
  }

  onSearchSelect = (value, index) => {
    const { newValue } = this.state;
    if (!!value) {
      newValue[index] = value || '';
      this.setState({ newValue });
    }
  }

  onBlurSelect = (index) => {
    const { newValue } = this.state;
    const value = newValue[index];
    console.log('===============输入的value', value)
    if (!!value) {
      this.onChangeSelect(value, index);
      delete newValue[index]; // 在onBlur后将对应的key删除,防止当从下拉框中选择后再次触发onBlur时经过此处恢复成原来的值
    }
  }




  render() {
    return (
      <div>
        <Select
          allowClear
          showSearch
          placeholder="请选择"
          onChange={(e) => this.onChangeSelect(e, '0')}
          onSearch={value => this.onSearchSelect(value, '0')}
          onBlur={() => this.onBlurSelect('0')}
          //filterOption={this.onFilterOption}  
          style={{ width: 170 }}
          value={this.state.record[0] || 10}
          //mode="multiple"
        >
          {fontSizeArr.map((item, index, arr) => <Option key={index} value={item['value']}>{item['value']}</Option>)}
        </Select>
      </div>
    )
  }

}

export default Kulian;
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值