클릭 된 것 == focus 된 것
으로 생각하여 const [color, setColor] = useState(false);
props
$bg를 전달한다. <FilterBtn
// $bg: color state가 true면 'skyblue' 아니면 "white"
$bg={color ? "skyblue" : "white"}
key={i}
>{el}
</FilterBtn>
// function
// CSS의 focus를 사용할 것이기 때문에 toggle로 만들지 않았다
const changeBg = () => setColor(true);
<FilterBtn
onClick = {() => changeBg()}
// $bg: color state가 true면 'skyblue' 아니면 "white"
$bg={color ? "skyblue" : "white"}
key={i}
>{el}
</FilterBtn>
const FilterBtn = styled.button`
&:focus { // focus가 되면
background-color: ${(props) => props.$bg}; // props로 전달 된 색으로 배경색을 변경
}
&:hover {
background-color: #1369b5;
color: white;
}
`;
color 라는 state는 Boolean 값이고 초기값은 false다.
버튼 컴포넌트는 $bg라는 props를 갖는데
이 props는 color가 true면 'skyblue 값`을,
color가 false면 'white' 값을 갖는다.
모든 버튼 컴포넌트는 클릭 시
color state를 true로 변경한다.
이렇게 되면 모든 버튼 컴포넌트의
배경색이 skyblue가 되는 것이 맞지만
버튼 컴포넌트에 적용한:focus
선택자로 인해
focus(클릭)가 된 버튼의 배경색만 'skyblue'로 변한다.
:focus
를 알아서 다행이다.:focus
가 순간 떠올라서 무사히 기능을 구현했다.