라디오버튼 이미지로 토글 만들기

miin·2021년 11월 8일
0

Skill Collection [view]

목록 보기
7/19
post-thumbnail

내용

  • 클릭했을때 활성화된 이미지 버튼으로 바뀐다
  • 둘중에 하나만 활성화됨

결과

코드

//Radio.js 재사용 컴포넌트
const Radio = ({ handleClickAdmin, click, text }) => {
  return (
    <ButtonBox>
     <AdminText>
      <NomalImg
    	alt="nomalImg"
    	src="/images/비활성화.png"
    	onClick={() => handleClickAdmin()}
	show={click}
	/>
      <ChangedImg
	alt="changedImg"
    	src="/images/활성화.png"
    	onClick={() => handleClickAdmin()}
	show={click}
	/>
      {text}
    </AdminText>
  </ButtonBox>

const NomalImg = styled.img`
  ${({ show })} => {
    return show ? `display:none` : `display:blick`;
   }}
`;

const ChangeImg = styled.img`
  ${({ show })} => {
    return show ? `display:blick` : `display:none`;
   }}
`;

//Login.js
const Login = () => {
  const [inputStatus, setInputStatus] = useState(false);
  
  const handleClickAdmin = () => {
    setInputStatus(!inputStatus);
  };

  return(
    <AdminText>
          <Radio
            click={!inputStatus}
            handleClickAdmin={handleClickAdmin}
            text="관리자"
          />
          <Radio
            click={inputStatus}
            handleClickAdmin={handleClickAdmin}
            text="기업"
          />
     </AdminText>

설명

  1. onClick이벤트가 발생하면 handleClickAdmin을 실행하고
  2. setInputStatus으로 false->true로 바꿔줌
  3. click이 true로 바뀌면서 show가 true 또는 false로 바뀌면서
  4. 스타일컴포넌트의 조건문이 실행된다
    ** onClick은 이벤트가 발생하는 해당 컴포넌트에서 적어줘야한다

내생각

input radio type을 처음 사용해봤다
하나가 클릭 되었을때 다른 하나는 비활성화 되어야 하니까 처음 접했을땐 너무 어려워서 시간이 꽤 걸렸다.
1. 클릭했을때만 background-color를 변경
2. radio 가 아닌 이미지토글로 해서 클릭하면 이미지가 변하게
3. onClick 각각에 다른 함수 달기
4. 한 함수로 계속 state 반대로 변경하기
등등의 여러 방법들의 고민들이 생겼었다.
background-color로 하니까 버튼전체가 주황색이 되어 테두리 선이 보이지 않아서 패스하고 이미지토글로 변경했다.
그리고 한 함수로 하나의 state를 관리하면서 반대로 변경해준다.
처음에는 계속 inputState따로 show 따로 관리를 하려고 시도했는데 그게 아니였다.
하나의 state로 관리하면서 click은 state를 직접적으로 연결되고,
show는 함수로 연결된다

0개의 댓글

관련 채용 정보