event 객체 중에 event.target.name 값을 사용하여 유동적으로 input을 다룬다. onChange 이벤트 핸들러에서 event.target.name은 해당 인풋의 name을 가리킨다.
JSX
이 코드에서 핵심은 객체(Object) 안에서 key를 [ ]로 감싸면 그 안에 넣은 레퍼런스가 가리키는 실제 값(value)가 key 값으로 사용되는 점을 이용한다.
특정 키 값으로 메서드 실행하기
onKeyPress 객체에 메서드를 넘기면 실행가능하다.
JSX
Synapse Map Insight
import React,{ Component }from"react";classCounterextendsComponent{constructor(props){super(props);// props를 오버라이딩// state의 초깃값 설정하기this.state ={number:0,fixedNumber:0,};}render(){const{ number, fixedNumber }=this.state;return(<div><h1>{number}</h1><h2>바뀌지 않는 값: {fixedNumber}</h2><buttononClick={()=>{this.setState({number: number +1});// this.setState를 사용하여 state에 새로운 값을 넣을 수 있다.}}> +1
</button></div>);}}exportdefault Counter;
import React,{ Component }from"react";classCounterextendsComponent{// state의 초깃값 설정하기 state ={number:0,fixedNumber:0,};render(){const{ number, fixedNumber }=this.state;return(<div><h1>{number}</h1><h2>바뀌지 않는 값: {fixedNumber}</h2><buttononClick={()=>{this.setState({number: number +1});// this.setState를 사용하여 state에 새로운 값을 넣을 수 있다.}}> +1
</button></div>);}}exportdefault Counter;
onClick={()=>{// this.setState를 사용하여 state에 새로운 값을 넣을 수 있다.this.setState({number: number +1});this.setState({number:this.state.number +1});}}
this.setState((prevState, props))=>{return(// 업데이트하고 싶은 내용)}
import React,{ Component }from"react";classCounterextendsComponent{// state의 초깃값 설정하기 state ={number:0,fixedNumber:0,};render(){const{ number, fixedNumber }=this.state;return(<div><h1>{number}</h1><h2>바뀌지 않는 값: {fixedNumber}</h2> <button onClick={()=>{this.setState((prevState)=>{return{number: number +1,};});// this.setState를 사용하여 state에 새로운 값을 넣을 수 있다.}}>
+1
</button></div>);}}exportdefault Counter;
this.setState((prevState)=>({// 이때 () 소괄호는 return을 포함한다.number: number +1,}));
import{ Component }from'react';classEventPracticeextendsComponent{ state ={username:'',message:'',};handleChange=(e)=>{// 화살표함수로 선언하면 메서드 바인딩을 생략할 수 있다.this.setState({[e.target.name]: e.target.value,});};handleClick=()=>{alert(this.state.username +': '+this.state.message);this.setState({username:'',message:'',});};render(){return(<div><h1>이벤트 연습</h1><inputtype="text"name="username"placeholder="사용자명"value={this.state.username}onChange={this.handleChange}/><inputtype="text"name="message"placeholder="아무거나 입력해 보세요"value={this.state.message}onChange={this.handleChange}/><buttononClick={this.handleClick}>확인</button></div>);}}exportdefault EventPractice;
handleKeyPress=(e)=>{// event를 받아서if(e.key ==='Enter'){// e.key로 특정키 여기서는 Enter를 눌렀을 때this.handleClick();// 동작을 실행}};// 이후 리턴 부에<inputtype="text"name="message"placeholder="아무거나 입력해 보세요"value={this.state.message}onChange={this.handleChange}onKeyPress={this.handleKeyPress}/>// onKeyPress를 넘겨줌