jineecode
이벤트 핸들링 본문
EventPractice.js
import React, { Component } from "react";
class EventPractice extends Component {
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
onChange={(e) => {
console.log(e);
}}
></input>
</div>
);
}
}
export default EventPractice;
console.log >> onChange event
input에 입력 시,
SyntheticBaseEvent 가 나타난다.
import React, { Component } from "react";
class EventPractice extends Component {
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
onChange={(e) => {
console.log(e.target);
}}
></input>
</div>
);
}
}
export default EventPractice;
console.log(e.target)
input 태그 그 자체가 나온다.
import React, { Component } from "react";
class EventPractice extends Component {
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
onChange={(e) => {
console.log(e.target.value);
}}
></input>
</div>
);
}
}
export default EventPractice;
console.log(e.target.value)
타이핑 하는 value 값 그대로 출력이 된다.
이것을 state로 핸들링 할 수 있을까?
value를 state에 따라 핸들링하기
import React, { Component } from "react";
class EventPractice extends Component {
state = {
message: "",
};
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={(e) => {
this.setState({
message: e.target.value,
});
}}
></input>
<button
onClick={() => {
alert(this.state.message);
this.setState({ message: "" });
}}
>
확인
</button>
</div>
);
}
}
export default EventPractice;
함수를 미리 만들어 전달하기
import React, { Component } from "react";
class EventPractice extends Component {
state = {
message: "",
};
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}
handleChange(e) {
this.setState({
message: e.target.value,
});
}
handleClick() {
alert(this.state.message);
this.setState({
message: "",
});
}
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={this.handleChange}
/>
<button onClick={this.handleClick}>확인</button>
</div>
);
}
}
export default EventPractice;
constructor을 쓰지 않고 외부에 함수를 만드는 법:
화살표 함수를 적극 이용한다.
import React, { Component } from "react";
class EventPractice extends Component {
state = {
message: "",
};
handleChange = (e) => {
this.setState({
message: e.target.value,
});
};
handleClick = () => {
alert(this.state.message);
this.setState({
message: "",
});
};
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={this.handleChange}
/>
<button onClick={this.handleClick}>확인</button>
</div>
);
}
}
export default EventPractice;
input 여러개 다루는 법
name 속성을 이용하여 여러 개의 이벤트를 조작할 수 있다
e.target.name은 해당 타겟의 name을 가리킨다.
import React, { Component } from "react";
class EventPractice extends Component {
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>
<input
type="text"
name="username"
placeholder="사용자명"
value={this.state.username}
onChange={this.handleChange}
/>
<input
type="text"
name="message"
placeholder="아무거나 입력해보세요"
value={this.state.message}
onChange={this.handleChange}
/>
<button onClick={this.handleClick}>확인</button>
</div>
);
}
}
export default EventPractice;
객체 안에서 key 값을 []로 감싸면, 그 안에 넣은 래퍼런스가 가리키는 실제 값이 key로 사용된다.
즉,
const name = "variantKey"
const object = {
[name]: 'value'
};
{'variantKey': 'value'}
이와 같다.
엔터키로 input 보내기
import React, { Component } from "react";
class EventPractice extends Component {
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: "",
});
};
handleKeyPress = (e) => {
if (e.key === "Enter") {
this.handleClick();
}
};
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="username"
placeholder="사용자명"
value={this.state.username}
onChange={this.handleChange}
onKeyPress={this.handleKeyPress}
/>
<input
type="text"
name="message"
placeholder="아무거나 입력해보세요"
value={this.state.message}
onChange={this.handleChange}
/>
<button onClick={this.handleClick}>확인</button>
</div>
);
}
}
export default EventPractice;
이벤트를 달아줄 때 중괄호 안에는 무조건 함수가 들어가야 한다.
ex:
<span onClick={함수()}>👍</span>
<span
onClick={() => {
console.log("1");
}}
>
👍
</span>
useState를 이용한 이벤트
...
let [good, change] = useState(0);
...
<span
onClick={() => {
change("ㄱㄴㄷ");
}}
>
👍
</span>
{good}
초기값
good : 0
변경되는 값
change("변경하고 싶은 값")
<span
onClick={() => {
change(good + 1);
}}
>
👍
</span>
{good}
'JS > react' 카테고리의 다른 글
react 환경에서 emmet 적용하기 (0) | 2021.04.29 |
---|---|
이벤트에 따른 class명 변경 (0) | 2021.04.29 |
state (0) | 2021.04.27 |
props (0) | 2021.04.27 |
궁금증 해소 (0) | 2021.04.27 |
Comments