React
2023-04-30 22:25
이 블로그에는 검색 기능 구현한 것이 있다.
검색 input을 입력하면 onChange를 실행하여 검색어에 맞는 포스트를 실시간으로 보여주기 때문에 submit 이벤트가 발생되지 않아 최근 검색어 기록을 조금 다르게 구현해보려고 한다.
우선 input 창 옆에 check 버튼을 추가해준다.
check 이미지는 내가 자주 사용하는 heroicons에서 가져왔다. https://heroicons.com/

<SearchSave onClick={handleSave}>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
</SearchSave>
javascript이제 check 버튼을 클릭하면 실행할 함수를 정의해주자.
첫 번째로, check 버튼 클릭 시 focus 되어있는 input을 blur 이벤트를 호출해 키보드 창을 숨길 것이다.
const handleSave = () => {
document.activeElement.blur();
}
javascript두 번째로, 최근 검색어를 보여주기 위해 검색어를 useState에 저장한다.
먼저, useState를 사용해 초기값이 빈 배열인 recentKeyword를 정의해준다.
const [recentKeyword, setRecentKeyword] = useState([]);
javascriptcheck 버튼을 클릭 시 set을 할건데, 최근 검색어 5개만 보여주기 위해 아래와 같이 작성한다.
const handleSave = (e) => {
document.activeElement.blur();
if (recentKeyword.length > 4) {
setRecentKeyword(recentKeyword.filter((v, i, arr) => i !== arr.length - 1));
}
setRecentKeyword((prev) => [keyword, ...prev]);
};
javascript