Component의 내부에서 정의하는 Component의 상태 값.
클래스형 컴포넌트를 작성할 때 해당 클래스 내부의 맨 위쪽에 작성하는 것이 일반적이다.
State 작성 예시
import React from 'react'; class Login extends React.Component { constructor (){ super(); this.state = { backgroundColor: "white", id: "seungmin", password: "" } } <button type="button" style={backgroundColor : this.state.backgroundColor} className="loginBtn">로그인</button>
위의 예시와 같이 Component
에 State
를 정의하고 JSX 코드
에 입력하면 Component
내부에 있는 요소들이 그 데이터를 반영하게 된다.
- constructor, super 함수가 반드시 입력되어야한다.
- State의 형태는
Object (객체)
로 key와 value 형식으로 되어 있다.
import React from 'react'; import Logo from './logo_text.png'; class Login extends React.Component { constructor (){ super(); this.state = { backgroundColor: "", id: "", password: "" } } HandleIdInput = event => { this.setState({ id: event.target.value }); } HandlePasswordInput = event => { this.setState({ password:event.target.value }) } render () { return ( <div className = "main-container"> <div> <img className = "logo" src = {Logo} alt = "logo"/> </div> <div className="login-form"> <input id="idInput" onChange={this.HandleIdInput} className="idInput" type="text" placeholder="전화번호, 사용자 이름 또는 이메일"/> <input id="passwordInput" onChange={this.HandlePasswordInput} className="passwordInput" type="password" placeholder="비밀번호"/> <button type="button" style={{backgroundColor : this.state.id.length > 0 && this.state.password.length >0 ? "#3399ff" : "#B2DFFC"}} className="loginBtn">로그인</button> </div> <div> <p className="resetPassword">비밀번호를 잊으셨나요?</p> </div> </div> ) } } export default Login;
button
이 활성화 되는 코드이다.#idInput
태그와 #passwordInput
태그에 각각 onChange 이벤트를 입력하여 이벤트를 걸어주었다. {
backgroundColor: "",
id: "",
password:""
}
id
, password
값은 사용자가 입력하는 값에 따라 변경되어야 하기 때문에 비워두었고, backgroundColor
값은 이벤트가 발생했을때와 발생하지 않았을때 각각 달라야하기 때문에 비워두었다.
HandleIdInput
함수가 실행되고 HandleIdInput
함수는 해당 이벤트 자체를 인자로 받는다.id
라는 state 값이 event.target.value
로 설정된다. 여기에서 event.target
은 idInput
이기 때문에 idInput
의 value값을 id에 넣어준다는 의미가 된다.backgoundColor
가 변경될 수 있도록 inline style을 사용했고 그 안에 3항 연산자를 사용하였다.style={{backgroundColor : this.state.id.length > 0 && this.state.password.length >0 ? "#3399ff" : "#B2DFFC"}}