fix(站点搜索): 修复确认搜索时关键字传递错误的问题
确保在用户点击键盘搜索按钮时,能正确获取搜索关键字。优先使用输入框事件携带的值,其次使用防抖待执行值,最后回退到当前输入值,避免因异步更新导致的关键字丢失。
| | |
| | | searchSiteRef.current(pendingValue); |
| | | }; |
| | | |
| | | // 确认搜索:优先使用显式关键字,其次使用防抖待执行关键字,最后回退到当前输入值 |
| | | const confirmSearch = (val?: string) => { |
| | | const explicitValue = typeof val === 'string' ? val : ''; |
| | | const pendingValue = pendingSearchValueRef.current; |
| | | const fallbackValue = deps.searchValue; |
| | | const targetValue = explicitValue || pendingValue || fallbackValue || ''; |
| | | if (debounceTimerRef.current) { |
| | | clearTimeout(debounceTimerRef.current); |
| | | debounceTimerRef.current = null; |
| | | } |
| | | pendingSearchValueRef.current = ''; |
| | | searchSiteRef.current(targetValue); |
| | | }; |
| | | |
| | | // 清空搜索结果列表 |
| | | const clearSearchResults = () => { |
| | | cancelDebouncedSearch(); |
| | |
| | | debouncedSearch, |
| | | cancelDebouncedSearch, |
| | | flushDebouncedSearch, |
| | | confirmSearch, |
| | | clearSearchResults |
| | | }; |
| | | } |
| | |
| | | debouncedSearch, |
| | | cancelDebouncedSearch, |
| | | flushDebouncedSearch, |
| | | confirmSearch, |
| | | clearSearchResults |
| | | } = useSiteSearch({ |
| | | router, |
| | |
| | | <Input className='search-input' placeholder={pageType == 'start' ? '请输入上车点' : '请输入目的地'} value={searchValue} |
| | | onInput={(e) => changeSearchValue(e)} |
| | | onBlur={flushDebouncedSearch} |
| | | onConfirm={() => { |
| | | cancelDebouncedSearch(); |
| | | searchSite(); |
| | | onConfirm={(e) => { |
| | | const keyword = e?.detail?.value || searchValue; // 确认搜索关键字,优先取输入框事件值 |
| | | confirmSearch(keyword); |
| | | }} |
| | | confirmType='search' |
| | | autoFocus |