jineecode

이벤트에 따른 class명 변경 본문

JS/react

이벤트에 따른 class명 변경

지니코딩 2021. 4. 29. 14:32

 

 

 

ValidationSample.css

.success {
  background-color: lightgreen;
}

.failure {
  background-color: lightcoral;
}

class가 success 면 lightgreen이,

failure면 lightcoral이 되는 css를 먼저 코드한다.

 

ValidationSample.js

import React, { Component } from "react";
import "./ValidationSample.css";

class ValidationSample extends Component {
  state = {
    password: "",
    clicked: false,
    vaildated: false,
  };

  handleChange = (e) => {
    this.setState({ password: e.target.value });
  };

  handleButtonClick = () => {
    this.setState({
      clicked: true,
      validated: this.state.password === "0000",
    });
  };

  render() {
    return (
      <div>
        <input
          type="password"
          value={this.state.password}
          onChange={this.handleChange}
          className={
            this.state.clicked
              ? (this.state.validated
                ? "success"
                : "failure")
              : ""
          }
        />
        <button onClick={this.handleButtonClick}>검증하기</button>
      </div>
    );
  }
}

export default ValidationSample;

 0. 처음 state의 상태는 password는 공백, clicked는 false, vaildate는 false이다.

  state = {
    password: "",
    clicked: false,
    vaildated: false,
  };

 

1. 비밀번호 입력 후 button 클릭

 1-1) handleButtonClick 이벤트 실행

 1-2) clicked가 true로 된다.

 1-3) validate는 state.password === "0000"이 된다.

  handleButtonClick = () => {
    this.setState({
      clicked: true,
      validated: this.state.password === "0000",
    });
  };

 

2. input의 className을 보면, 

 

          className={
            this.state.clicked
              ? (this.state.validated
                ? "success"
                : "failure")
              : ""
          }

2-1) 첫번째 삼항연산자

this.state.clicked ? validated : ""

처음엔 false이기 때문에 className이 없는 "" 상태지만, 버튼을 누르게 되면 validated가 true로 setState된다.

 

2-2) 두번째 삼항연산자

this.state.validated ? "success" : "failure"

 

입력된 password (onChange)가 validated가 0000 인가? 

맞으면 클래스명이 success, 틀리면 failure가 된다.

 

 


 

TIP:

 

JSX 내부에서는 if문을 쓸 수 없으며 삼항연산자를 사용하여 조건문을 준다.

중괄호를 쓴 뒤, false 는 null 을 쓰는 것이 관습적이다.

 

 

function Modal() {
  return (
    <div className="modal">
      <h2>제목</h2>
      <p>날짜</p>
      <p>상세 내용</p>
    </div>
  );
}

{1 < 3 ? <Modal /> : null}

 

react 에서는 on / off 를 state로 관리한다.

 

  let [modal, modalChange] = useState(false);

modal이 처음엔 false이며, 이벤트가 일어날 때 modalChange로 상태를 관리한다.

(이 경우엔 이벤트 발생 시, true 로 바꾸어주어야겠다)

 

          <h3
              onClick={() => {
                modalChange(true);
              }}
            >

modalChange를 true로 바꾸어 주는 모습

 

 

'JS > react' 카테고리의 다른 글

react에서의 반복문  (0) 2021.04.29
react 환경에서 emmet 적용하기  (0) 2021.04.29
이벤트 핸들링  (0) 2021.04.29
state  (0) 2021.04.27
props  (0) 2021.04.27
Comments