jineecode
이벤트에 따른 class명 변경 본문
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 |