antd中select下拉框值为对象选中的问题入门指南_antd使用帮助

使用antd中的select下拉框,遇到个小问题,后台管理系统中,使用下拉框,一般不会是简单的就直接使用select中的value值,而是会使用id或者value中文对应的keyword,并且这个在option中的value值也是可能重复的 1.效果图2.select相关代码我这里用的是reactlet list = [{title: ‘普通会员’,id:

antd中select下拉框值为对象选中的问题入门指南

使用antd中的select下拉框,遇到个小问题,后台管理系统中,使用下拉框,一般不会是简单的就直接使用select中的value值,而是会使用id或者value中文对应的keyword,并且这个在option中的value值也是可能重复的  

antd中select下拉框值为对象选中的问题入门指南_antd使用帮助

1.效果图

antd中select下拉框值为对象选中的问题入门指南_antd使用帮助

2.select相关代码

我这里用的是react

let list = [
    {
      title: '普通会员',
      id: 1
    },{
      title: '测试专用人员',
      id: 2
    }, {
      title: '测试专用人员',
      id: 3
    }
];
let currentEditOption: {
    roleId: '',
    title: '',
};

<Select
  value={currentEditOption.title}
  style={{width: '70%'}}
  suffixIcon={<Icon type="caret-down"/>}
>
  {
    list.map((item:any) =>
      <Option key={item.id} value={item.title}>{item.title}</Option>
    )
  }
</Select>

下拉框事件

handleSelect = (value:any, option: any) => {
    console.log(value)
    /* option返回的是option对应的整个对象 */
    console.log(option)
};

此时,并没有出现问题,但是,一旦list中有两项的title字段是以一样的,浏览器就报警告

Warning: Encountered two children with the same key, `.$测试专用人员`. Keys should be unique so that components maintain their identity across updates. Non-unique keysmay cause children to be duplicated and/or omitted — the behavior is unsupported andcould change in a future version.

按照我的理解,select下拉框应该是去检测key值而不检测value值的,但是,我设置key值后,还是会检测value值

当然,你这里可以去掉value值的设置,它也能实现下拉选择后,onchang能获取到对应的数据,但我想实现的是,当select中有选中值的时候,option选项中对应的值应该是选中状态的

然后,我就尝试了多次,还设置过optionLabelProp这个属性,没有用,开始的时候,我也设置过labelInValue,不过,我传入value值不是对象,导致我开始尝试的时候放弃了labelInValue属性的设置,后面又重新尝试,发现OK了,并且,这个时候,不用设置option中的value值,只设置key就可以了

<Select
  labelInValue
  value={{key: currentItem.roleId, label:currentItem.title}}
  style={{width: '70%'}}
  onChange={handleSelect}
  suffixIcon={<Icon type="caret-down" />}
  getPopupContainer={(triggerNode: any) => triggerNode.parentNode}
>
  {
    list.map((item:any) =>
      <Option key={item.id}>{item.title}</Option>
    )
  }
</Select>

下拉框的选择事件

/* 定义下拉框选择 */
handleSelect = (value:any, option: any) => {
    /* 此时value值是一个对象 */
    console.log(value)
    /* option返回的是option对应的整个对象 */
    console.log(option)
};

3.option组件出现位置偏移

在弹窗组件中使用select时,当点击Select组件出现下拉选项后滚动原始页面,出现下拉选项和Select框分离现象

这个时候就可以用官方提供的方式来防止位置偏移

在select中直接加入这个方法getPopupContainer={triggerNode => triggerNode.parentNode}

海计划公众号
(0)
上一篇 2020/03/23 08:59
下一篇 2020/03/23 08:59

您可能感兴趣的内容