antdDesign select一些api的理解

本文详细介绍了Ant Design中Select组件的各种属性及用法,包括defaultValue动态赋值、dropdownRender自定义下拉内容、filterOption自定义搜索逻辑、labelInValue返回对象、optionFilterProp指定搜索属性等功能。
摘要由CSDN通过智能技术生成

关于antd组件Select的api的用法

1 defaultValue

defaultValue 文档看起来比较简单,但是当你动态赋值的时候会发现defaultValue不起作用,原因就是react渲染机制引起的,那么怎么解决这个问题呢?
1 我查百度常说的是把 defaultValue 换成 value 但是Select 组件当换成value 属性时 再下拉选择,选择内容不在会改变,所以这个方法并不适用
2 对于这个问题 可一个Select 设置一个 key值,根据diff算法,key值不同 会重新渲染 代码如下

<Select placeholder="请选择" 
style={{ "width": "200px" }} 
key={this.state.options.length > 0 ? this.state.options[1].value : " "}   
onChange={this.handleChange}  
defaultValue={this.state.options.length > 0 ? this.state.options[2].value : ""}   
options={this.state.oprtion}   />

2 dropdownRender

这个属性 是让我们可以自定义下拉框的内容 举例如下

<Select  placeholder="请选择"  onChange={this.handleChange} allowClear  dropdownRender={(menu) =>
                        <div>
                            {menu}
                             <Card>
                               自定义内容
                             </Card>
                        </div>
                    } >
                     
                         {this.state.options.map((item, index) => {
                                if (index <= 2) {
                                  return (
                                 <Option value={item.value} key={item.value} label={item.label}  > {item.label} </Option>
                                    )
                                }
                            })} 
                    </Select>

可以看到 dropdownRender的用法最终返回的是个dom,menu就是代表select下的 option的各项,然后Card里的东西就是我们自定义的下拉框内容了

3 filterOption

filterOption 是当我们设置下拉框具备搜索功能时,在这个函数里可以自定义搜索方式

handleFilter=(inputValue,option)=>{
     // inputValue 就是我们向搜锁框里输入的内容
     // option 是返回的各个option的实例对象 
     //比如像这样  {key: "4", value: "4", children: "漩涡鸣人", label: "漩涡鸣人"}  
}
<Select  filterOption={this.handleFilter}   >
                      
   {this.state.options.map((item, index) => {
    if (index <= 2) {
     return (
       <Option value={item.value} key={item.value} label={item.label}  >
          {item.label}
       </Option>
     )
   }
 })}
</Select>

4 labelInValue

给 Select 添加这个属性,就不会再返回value值,而是返回一个对象了,
还是代码说话

 handleChange=(value)=>{
   console.log(value)   //没加labelInValue之前 返回的 是 1
                       //加了labelInValue之后返回的是 {value:1,label:"漩涡鸣人"}
 }
 <Select  labelInValue  onChange={this.handleChange}>
    <Option value="1" key="1" label="漩涡鸣人">漩涡鸣人<Option>
    <Option value="2" key="2" label="漩涡玖辛奈">漩涡玖辛奈<Option>
 </Select>

4 optionFilterProp

这个属性是当我们设置下拉框允许搜索功能时,对应某个属性的搜索
比如说<Option value="1" key="1" label="漩涡鸣人">漩涡鸣人<Option>
一个option有value 也有label属性 如果想要搜索是根据label属性对应的内容搜索 我们只需
设置这个optionFilterProp="label"即可

 <Select optionFilterProp="label" onChange={this.handleChange}>
    <Option value="1" key="1" label="漩涡鸣人">漩涡鸣人<Option>
    <Option value="2" key="2" label="漩涡玖辛奈">漩涡玖辛奈<Option>
 </Select>

5 optionLabelProp

这个属性是我们选中哪个选项时回填到选择器里的内容

<Select onChange={this.handleChange} optionLabelProp="label"  >
       {this.state.options.map(item => {
          return (
            <Option value={item.value} key={item.value} label={item.label}   >
               <div >
                 3333333333
                 {item.label}
               </div>
              </Option>
            )
        })}
</Select>

如果我们选中了哪个选择项 应该回填到 select里的内容应该是选中里面的所有内容,但是设置了 optionLabelProp=“label” 那么我们回填到选择框的内容就只有label了

6 options

配置化 比如我们返回的数据是
[{value:1,key:1,label:“漩涡鸣人”},{value:2,key:2,label:“漩涡玖辛奈”}]
当设置 <Select options={this.state.option} /> 就不用再写那么多的组件了

7 showSearch

这个属性可以是选择框具备搜索功能

8 tagRender

这个属性比如我们在 mode="multiple"情况下可以自定义 tag的样式等
这个就用官网的例子举例来说

tagRender=(props)=>{
   const {label,value,onClose,onClose}=props
   return (
    <Tag color={value} closable={closable} onClose={onClose} style={{ marginRight: 3 }}>
      {label}
    </Tag>
  );
}
<Select
    mode="multiple"
    tagRender={tagRender}
    defaultValue={['gold', 'cyan']}
    options={options}
  />,

这样我们选中每个选项后到select输入框里的内容就是我们自定义好的标签了

对于一些onChange,onBlur的方法就不多说了,也好理解,看好回调的参数就好

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值