🔎 推奨クエリー機能
10358 ワード
🛫 バックエンド
// /api/keyword/[keyword].ts
// async 함수 내부에 있다고 가정
const keywords = await prisma.keyword.findMany({
where: {
keyword: {
contains: keyword,
},
},
select: {
keyword: true,
},
});
🛬 フロント
1.ジッタの適用
disbounceとは、同じリクエストを連続的に受信すると、最後のリクエストのみが有効になることを意味します.
商品検索では、検索語を入力したときのイベントに推奨検索語が表示されます.このオプションを適用しないと、ユーザーがアルファベットを押すたびにリクエストを発行し、サーバに大きな負担をかけます.
この問題を解決するために,連続入力クエリ時にサーバに送信されない要求を処理する装置を適用した.
2.合焦
推奨検索語が受信された後にレンダリングされた場合、ユーザーが検索ペインにフォーカスしている場合にのみ、推奨検索語が表示されます.
初期には,
onFocus
とonBlur
を用いて,フォーカスが離れたときに推奨検索語が消え,そうすると推奨検索語をクリックしたり,推奨検索語のフォーカスに移動したりすると,検索ウィンドウonBlur
が実行され,推奨検索語が消えてしまうという問題があった.問題を解決するために、以前使用したモード領域の外クリック時に閉じる機能をインポートし、適用しました.
// 2022/04/16 - 키워드 값 - by 1-blue ( react-hook-form의 useForm() )
const keyword = watch("keyword");
// 2022/04/16 - 키워드 포커스 여부 및 관련 키워드 보여줄지 결정할 변수 - by 1-blue
const [isFocus, setIsFocus] = useState(false);
// 2022/04/16 - 키워드 검색 시 디바운스 적용할 때 사용하는 변수 - by 1-blue
const [debounce, setDebounce] = useState(false);
// 2022/04/16 - 키워드 검색 시 디바운스 적용할 때 사용하는 함수 - by 1-blue
const debounceKeyword = useCallback(() => setDebounce(true), [setDebounce]);
// 2022/04/16 - 키워드 검색 시 디바운스 적용 - by 1-blue
useEffect(() => {
const timerId = setTimeout(debounceKeyword, 300);
return () => {
clearTimeout(timerId);
setDebounce(false);
};
}, [debounceKeyword, keyword, setDebounce]);
// 검색창과 추천 검색어를 자식으로 가지는 element
const wrapperRef = useRef<HTMLDivElement>(null);
// 2022/04/16 - 영역외 클릭 시 추천 키워드 창 닫기 - by 1-blue
const handleCloseModal = useCallback(
(e: any) => {
if (
isFocus &&
(!wrapperRef.current || !wrapperRef.current.contains(e.target))
)
setIsFocus(false);
},
[isFocus, setIsFocus, wrapperRef]
);
// 2022/04/16 - 추천 키워드 창 닫기 이벤트 등록 - by 1-blue
useEffect(() => {
setTimeout(() => window.addEventListener("click", handleCloseModal), 0);
return () => window.removeEventListener("click", handleCloseModal);
}, [handleCloseModal]);
// 2022/04/16 - 추천 키워드 패치 - by 1-blue
const { data: recommendKeywords } = useSWR<IResponseOfRecommendKeywords>(
debounce && keyword ? `/api/keyword/${keyword}` : null
);
Reference
この問題について(🔎 推奨クエリー機能), 我々は、より多くの情報をここで見つけました https://velog.io/@1-blue/추천-검색어-기능テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol