React-Select异步搜索筛选输入框searchText始终为空,搜索功能失效问题求助
React-Select异步搜索筛选输入框searchText始终为空,搜索功能失效问题求助
嘿,我刚好碰到过一模一样的问题!后来翻了react-select的官方文档才搞明白问题出在哪——你对filterOption函数的参数理解错啦!
咱们先看react-select里filterOption的正确函数签名:它的第二个参数并不是直接的搜索文本,而是一个包含inputValue属性的对象。你现在直接把第二个参数当成searchText来用,自然会拿到空值,因为根本就不是这么传参的。
给你修改一下自定义筛选函数的写法:
const customUsersFilter = (option, { inputValue }) => { console.log('option ==', option); console.log('searchText ==', inputValue); // 这里改成inputValue才是用户输入的内容 if (!inputValue) return true; // 另外建议把严格相等改成includes,不然只有完全匹配邮箱才会命中,搜索体验会很差 const match = option.data.email.toLowerCase().includes(inputValue.toLowerCase()); console.log(match ? 'returning true' : 'returning false'); return match; };
另外还要提醒你检查一下你的选项数据结构:如果你的userList里的每一项直接就是{id: xxx, email: xxx}这种格式,那你应该用option.email而不是option.data.email,不然也会找不到对应字段哦。
最后再确认一下AsyncSelect的配置,cacheOptions应该设为true而不是直接传userList(官方文档里cacheOptions是布尔值,用来控制是否缓存加载的选项),不过这个可能不是导致搜索失效的直接原因,但也建议修正成正确用法:
<AsyncSelect key="users_select" onMenuScrollToBottom={handleScrollToBottomUsers} cacheOptions={true} // 这里改成布尔值 defaultOptions={userList} isLoading={loadingUsers} value={selectedOwner} onChange={setSelectedOwner} getOptionLabel={(option) => option.email} getOptionValue={(option) => option.id} isSearchable={true} filterOption={customUsersFilter} isClearable={true} />
这样修改之后,应该就能正常获取到用户输入的搜索文本,筛选功能也能生效啦!
备注:内容来源于stack exchange,提问作者Alexander P
相关产品推荐
相关产品推荐

