7. React에서 폼 다루기
input, textarea, option 같은 다른 폼 요소를 통한 입력 처리 방법
7.1 React에서 폼을 다루기 위한 권장 방법
ex) React에서 폼 다루기
handleChange(event) {
this.setState({title: event.target.value})
}
render() {
return <input type="text" name="title" value={this.state.title} onChange={this.handleChange.bind(this)}/>
}
단방향 바인딩 이라고 한다. ; 상태가 뷰를 갱신하는 것이 전부이기 때문
7.1.1 React에서 폼과 이벤트 정의하기
- onChange : 폼의 입력 요소에 변경이 생기면 발생
- onInput :
요소의 값이 변경될 때 발생. (비추천) - onSubmit : 폼 제출 시 발생.
ex) enter키로 폼 전송하기
handleKeyUp(event) {
if (event.keyCode == 13) return this.sendData()
}
render() {
return <form onKeyUp={this.handleKeyUp}>
...
</form>
}
7.2 폼을 다루는 다른 방법
7.2.1 비제어 엘리먼트에서 변경 감지하기
ex) 변경을 감지하는 비제어 엘리먼트
class Content extends React.Component {
constructor(props) {
super(props)
this.state = {textbook: ''}
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
console.log(event.target.value)
this.setState({textbook: event.target.value})
}
render() {
return <div>
<input
type+'text"
onChange={this.handleChange}
placeholder="Eloquent TypeScript: Myth or Reality" />
<br/>
<span>{this.state.textbook}</span>
</div>
}
}
7.2.2 비제어 엘리먼트에서 이벤트 감지하지 않는 경우
7.2.3 값에 참조로 접근하기
비제어 컴포넌트를 다룰 때는 onChange 같은 이벤트를 이용해 입력을 감지하지 않으므로 refs를 통해 참조로 값에 접근한다.
참조를 사용하면 React 컴포넌트의 DOM 요소 또는 노드를 가져올 수 있다.
변경을 감지하지 않고 폼 요소읙 ㅏㅄ을 가져와야 할 때 유용하다.
ex) 이메일 폼 만들어 보기
class Content extends React.Component {
constructor(props) {
super(props)
this.submit = this.submit.bind(this)
this.prompt = 'Please enter your email to win'
}
submit(event) {
let emailAddress = this.refs.emailAddress
let comments = this.refs.comments
let fd = ReactDOM.findDOMNode
console.log(fd(emailAddress).value)
console.log(fd(comments).value)
}
render() {
return (
<div calssName="well">
<p>{this.prompt}</p>
<div className="form-group">
Email: <input ref="emailAddress" className="form-control" type="text" placeholder = "ysg01129@naver.com" />
</div>
<div className="form-group">
Comments: <textarea ref="comments" className="form-control" placeholder = "I like Android!!!"/>
</div>
<div className="form-group">
<a className="btn btn-primary" value="Submit" onClick={this.submit}>Submit</a>
</div>
</div>
)
}
}
7.2.4 기본값 설정하기
defaultValue
요약
- 폼을 다루는 방법 중 권장하는 방법은 변경을 감지하여 이벤트 리스너로 상태에 데이터를 저장하는 제어 컴포넌트를 사용하는 것이다.
- 변경을 감지하거나 감지하지 않는 비제어 컴포넌트를 사용하는 방법은 좋은 방법이 아니므로 피한느 것이 좋다.
- 참조와 기본갑승ㄴ 모든 경우 사용할 수 있지만, 제어 컴포넌트의 경우에는 사용할 필요가 없다.
- React의
- this.refs.NAME은 클래스 참조에 접근하는 방법이다.
- defaultValue는 엘리먼트의 초기 뷰(DOM)를 설정할 때 사용할 수 있다.
- 참조를 설정하려면 ref={el => {this.input = el; }} 처럼 함수를 사용하거나 ref="NAME"으로 문자열을 사용할 수 있다.
'React' 카테고리의 다른 글
12. Webpack 빌드 도구 (0) | 2018.12.02 |
---|---|
8. 확장성을 고려한 React 컴포넌트 (0) | 2018.12.02 |
6. React에서 이벤트 다루기 (0) | 2018.12.02 |
5. React 컴포넌트 라이프사이클 이벤트 (0) | 2018.12.02 |
4. React 컴포넌트의 상태 객체 (0) | 2018.12.02 |