'사랑'이라는 검색어를 엔터로 입력하면, 이전에 추가된 '쇼펜하우어' 검색어가 사라지고 '사랑'으로 덮어씌워진다.
즉, 검색어 리스트를 클릭해서 추가된 검색어가 나중에 엔터로 입력한 검색어에 의해 덮어씌워지는 현상이 발생합니다.
왜그럴까? 분명 key를 전역으로 관리하고 search에서 searchResult로 넘겨주지 않아서 이젠 덮어 씌어질 현상이 없는데.. 왜 대체 다시 덮어씌어지는 걸까?
useLocalStroge 때문일까? addkey를 하면 키워드가 로컬 스토리지에 추가된다.. 기존에 있는 키워드를에서 새로운 키워드를 추가한다.. 뭐가 문제일까?
갑자기 드는 생각은 keyword를 search와 searhResult를 둘다 사용하지 말고 각자 사용해서 addkey에 추가하는 방법은 어떨까?
고민을 정말 많이 해봤다. 로직을 천천히 이해해보자!
const addKeyword = (keyword: string) => {
if (typeof keyword === 'string' && keyword.trim() !== '') {
if (!storedValue.includes(keyword)) {
const newKeywords = [keyword, ...storedValue.slice(0, 10)];
setItem(newKeywords);
} else {
console.error('Keyword already exists:', keyword);
}
} else {
console.error('Invalid keyword:', keyword);
}
};
const addKeyword = (keyword: string) => {
if (typeof keyword === 'string' && keyword.trim() !== '') {
const currentStoredValue = getItem(); // 로컬 스토리지의 현재 상태를 가져옵니다.
if (!currentStoredValue.includes(keyword)) {
const newKeywords = [keyword, ...currentStoredValue.slice(0, 10)];
setItem(newKeywords); // 이 함수는 새로운 상태를 로컬 스토리지에 저장합니다.
} else {
console.error('Keyword already exists:', keyword);
}
} else {
console.error('Invalid keyword:', keyword);
}
};
위에 코드로 변경 후 검색어 덮어씌어지는 현상를 해결하였다.