- current 버튼
<button
onClick={() => handleCityChange("current")}
className={`${selected === "current" ? "selected" : ""}`}>
CURRENT LOCATION
</button>
- city 버튼
{cities.map((city, idx) => (
<button
key={idx}
onClick={() => handleCityChange(city)}
className={`${selected === city ? "selected" : ""}`}>
{city.toUpperCase()}
</button>
))}
→ handleCityChange를 props로 전달 받는다.
함수 인자로는 city 와 current 를 넘겨준다.
함수 인자를 city와 current 로 나누는 이유는 current는 cities 배열에 포함되어 있지 않아서 map함수로 돌릴 수 없기 때문이다.
같은 함수를 쓰고 인자에 따라 조건을 붙여주면 나눠서 동작할 수 있다.
const [city, setCity] = useState(null);
const [selected, setSelected] = useState("current");
const handleCityChange = (city) => {
if (city === "current") {
setCity(null);
setSelected(city);
} else {
setCity(city);
setSelected(city);
}
};
→ 눌린 버튼이 current인지 city인지 구별하기 위해 city, setCity의 useState를 만들었고, 눌린 버튼이 어떤 버튼인지 구별하기 위해서
→ const [city, setCity] = useState(null);
눌린 버튼이 current인지 city인지 구별하기 위해서 비어있는 useState를 만들었다.
→ const [selected, setSelected] = useState("current");
눌린 버튼이 어떤 city버튼인지 구별하기 위해 useState를 만들었고,
초기값은 current를 넣어 페이지가 맨 처음 열렸을때 current 버튼에 active가 작동하도록 만들었다.
🚩 App.css