const [keyword, setKeyword] = useState("") // 키워드
const [resultList, setResultList] = useState([]) // 키워드에 대한 결과를 담아주는 배열
// 검색 디바운스(한글자 칠때마다 새로 업데이트 방지)
const onChageKeyword = _.debounce((e: any) => {
setKeyword(e.target.value);
}, 500);
// 버튼 누르면 입력한 value 삭제 =>
const onClickRemoveKeyword= () => {
setKeyword("");
};
// 키워드에 대한 결과를 불러와주는 get api
const searchData = async () => {
try {
const result = await axios.get("/api/search?string=${keyword}")
setResultList(result.data)
} catch (e) { console.log(e) }
}
// 키워드를 입력해서 keyword 값이 바뀔때마다 기능을 실행시켜주는 hook
useEffect(()=>{
searchData ()
}, [keyword])
retrun (
<input
type="text"
onChange={onChageKeyword}
value={keyword} // >> 여기!! <<
/>
<button
type="button"
onClick={onClickRemoveKeyword}
>
지우기
</button>
)
>> 여기 << 부분을 주석한 상태에서
- 키워드를 입력 => keyword가 debounce를 통해 적당한 state 새로고침으로 데이터가 들어감
- keyword가 바뀔때마다 useEffect를 이용해 검색 함수를 실행
- 실시간으로 결과가 잘보임!
- 그러나!! 입력했던 키워드 전체를 지우려고 버튼을 누르면 state는 초기화가 돼서 불러오는 리스트는 초기 세팅으로 바뀌지만
input에 있는 값은 지워지지 않습니다.
value={keyword}를 하면 지워지는 방법은 알고 있지만,
useEffect를 사용해서인지 debounce를 사용해서인지
>> 여기 << 부분을 주석을 풀면, input에 글자가 입력조차 안됩니다.
어떻게 해결해야할까요?