import {Input, View, Text, PageContainer, Image} from "@tarojs/components"; import {FC, useEffect, useMemo, useState} from "react"; import styles from './index.module.scss' import Taro from "@tarojs/taro"; import {useDidShow} from '@tarojs/taro' import SearchList from './components/list' import NavigationBar from "@/components/navigationBar/navigationBar"; import search from '@/static/img/search.png' import del from '@/static/img/del.png' const Search: FC = () => { const [value, setValue] = useState('') const [recentSearch, setRecentSearch] = useState([]) const [hotSearch] = useState([]) const [show, setShow] = useState(false) const [focus, setFocus] = useState(false) useDidShow(getRecentSearch) useEffect(() => { !show && getRecentSearch() }, [show]) function inpFn(e) { setValue(e.detail.value) } function clearSearch() { Taro.removeStorageSync('recentSearch') getRecentSearch() Taro.showToast({title: '删除成功'}) } function getRecentSearch() { setRecentSearch(Taro.getStorageSync('recentSearch')) } function getSearchItem(value) { setValue(value) setShow(true) } function searchInput() { if (value === "") return; getSearchItem(value) //记录最近搜索 let recentSearch = Taro.getStorageSync('recentSearch') || []; recentSearch.unshift(value); Taro.setStorageSync('recentSearch', [...new Set(recentSearch)]) } function cancelSearch(){ setValue('') setShow(false) setFocus(false) // Taro.navigateBack() } const searchStyles = useMemo((): React.CSSProperties | undefined => { if (focus || show) { return { // transform: "translateY(-43px)", // width: "100%", } } }, [focus, show]) return ( 搜索 } /> setFocus(true)} onBlur={() => setFocus(false)} className={styles.input} placeholder={(focus || show) ? '' : "输入关键字搜索"} type='text' value={value} confirmType='search' onInput={inpFn} onConfirm={searchInput}/> 清空 {/*{focus || show ? 取消 : null}*/} { recentSearch.length >= 1 && !show && 最近搜索 { recentSearch.length > 0 && recentSearch?.map(d => getSearchItem(d)} className="font-28">{d} ) } } { hotSearch.length >= 1 && !show && <> 热门搜索 { hotSearch.length && hotSearch.map(d => { getSearchItem(d) }} className="font-28">{d} ) } } {show && } ) } export default Search