antd中AutoComplete组件的一些问题

最近做自己的一个项目的时候,用到一个自动填充的输入框,因为前端使用的antd,自然就引入了antd中的AutoComplete的组件。

官网链接:链接

AutoComplete的填充数据有两种用法,一种是dataSouce,另外一种是option,运用option更灵活,可以渲染出自己想要的选择填充数据的样式。

由于选择的填充数据是扒的别人的接口,这个接口返回的我想要的数据是带html标签的字符串,react里面把html字符串转义成dom的是

给div带上dangerouslySetInnerHTML={{__html: v}}的参数。设置成这样后,在AutoComplete选择数据后填充的却是[object Object],因为antd的这个组件选择要填充的数据后默认为Option的子元素,显然现在加上一个转义html的div后,Option的子元素不再是text文本而是一个dom对象了。

这时候AutoComplete提供了optionLabelProp这个参数,这个参数的功能为回填到选择框的 Option 的属性值,默认是 Option 的子元素。没看懂官方后面说的这个“比如在子元素需要高亮效果时,此值可以设为 value。”。但经过我测试,这个参数的string类型的值对应到为Option组件的参数值。意思就是,比如我给这个Option挂了一个text参数,那么在AutoComplete的optionLabelProp参数设置为"text"时,回填到选择框的值即为text参数的值。

const children = result.map((v,k) => <Option key={k} text={this.tools(v)}><div dangerouslySetInnerHTML={{__html: v}}></div></Option>);

so,如上面,自己再写一个正则表达式即可把带html的标签字符串过滤掉,回填到选择框,还能在选择框的选择填充数据上用dangerouslySetInnerHTML渲染出样式。

之后又出现了一个问题,我想监听onSelect选择的值,这个onSelect的默认值官方解释为:
1169800-20190620021142901-1919451488.png

我给Option设置了value参数后出现了报了react same key的警告,那key参数是干嘛的?key参数确实没重复的,(value参数设置的数据里面确实有重复的)有点疑问,这个问题提了issue,之后看看源码应该就能明白。
当然之后我就去除了这个value参数,把数组数据提前保存在state中,onselect的默认参数结果就是Option的key值,后面就用这个key获取到我想要的数据了。

(注意dangerouslySetInnerHTML的数据源应为净化后的数据,命名原本就是提醒XSS攻击的,在tools函数中也应该加上转义危险符号的功能)
这几天尽快想把这个项目上线,在入职之前搞定。下次这篇博客更新就是剖析antd源码中这个AutoComplete的设计。
------一天后----
so,给仓库提了issue之后偏右大大给了之前讨论过这个问题issue的链接,AutoComplete的option貌似和其他组件的option是一样的。
链接
主要原因可能就是“目前没有优雅的办法去传递 Option 的 key 给 MenuItem”,加上防止“不可预计的错误”,只能特殊问题特殊处理了。

转载于:https://www.cnblogs.com/zhangmingzhao/p/11056042.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值