8.9 (수)
가족 호캉스를 갔다 오느라, 업데이트가 느렸다.
선택한 나라를 localstorage에 저장하려고 했다. 첫 번째 시도에서는 저장이 잘 됐지만, 새로고침 시 빈 배열이 localstorage에 저장이 됐다. 그래서 이를 해결하려고 코드를 수정했는데, 이번에는 새로고침 시 localstorage에 들어있던 값들이 초기화가 됐다.
const [searchTerm, setSearchTerm] = useState<string>('');
const [searchResults, setSearchResults] = useState<any[]>([]);
const [selectedCity, setSelectedCity] = useState<any>([]);
const [storage, setStorage] = useState<any>([JSON.parse(localStorage.getItem('selectedCity')!)]);
// 도시 검색 기능
const handleSearch = (e: any) => {
const input = e.target.value.toLowerCase();
const filteredCountries: any[] = countriesData.countries.filter((country) =>
country.country.toLowerCase().startsWith(input)
);
setSearchTerm(input);
if (input === '') setSearchResults([]);
else setSearchResults(filteredCountries);
};
// 도시 누를 시 기능
const handleClick = (city: any[]) => {
setSelectedCity((prev) => {
const updated = [...prev, city];
const prevCity = JSON.parse(localStorage.getItem('selectedCity')!);
if (prevCity !== null && prevCity !== undefined) prevCity.push();
localStorage.setItem('selectedCity', JSON.stringify(prevCity));
return updated;
});
setSearchTerm('');
// addLocalStorage(city);
};
// 저장된 도시 목록 불러오기
useEffect(() => {
const prevCities: string | null = localStorage.getItem('selectedCity'); // 값이 있는지 확인
if (prevCities) {
setStorage(JSON.parse(prevCities));
}
}, []);
나라 검색을 API를 사용하려고 했었다. 현재 사용하고 있는 Tomorrow.io에서 List Locations API를 제공중인데, 업데이트가 3년전이었다. 그래서 오류가 있는지 Response를 받아도 길이가 0인 배열만 받았다.. 그래서, 나라의 이름과 위도, 경도 정보를 가지고 있는 JSON 파일을 찾아서 이를 활용하기로 했다.
resizable-layout을 만들기 위해서 라이브러리를 사용했는데, 라이브러리를 이렇게 가져다 써도 되나? 싶었다.
JSON.stringify(넣고싶은 자료)
: JavaScript 값이나 객체를 JSON 문자열로 변환한다.JSON.parse()
: JSON 문자열의 구문을 분석하고, 그 결과에서 JavaScript 값이나 객체를 생성한다.const [searchResults, setSearchResults] = useState<any[]>([])
와 같이 <>
안에 타입을 지정해야 한다.