div
, button
, input
, from
, span
등의 DOM 요소에는 이벤트 설정이 가능하지만 내가 만든 컴포넌트에 props로 함수를 전달해도 그것은 내가 만든 컴포넌트 안의 DOM 요소에서 사용할 수 있는 것이지 내가 만든 컴포넌트 자체에서 사용할 수 있는 것이 아니다.// index.js
<MyComponent onClick={doSomething} />
// MyComponent.js
<div onClick={this.props.onClick} />
책에서는 먼저 클래스형 컴포넌트의 형태를 다룬 뒤 함수형 컴포넌트로 바꾸면서 가르쳤는데, 나는 그냥 처음부터 함수형 컴포넌트로 작성하면서 공부했다.
클래스형 컴포넌트 쪽으로는 눈으로만이라도 읽으려고는 하지만 굳이... 손으로 짤 일은 딱히 없을 것 같기도 하고... 어쨌든 진도를 먼저 나가보기위해...
e.persist()
함수를 호출해주어야 한다.import React, { useState } from "react";
const EventPractice = () => {
const [message, setMessage] = useState("");
console.log("message", message);
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해보세요"
value={message}
onChange={(e) => {
setMessage(e.target.value);
}}
/>
<button
onClick={() => {
alert(message);
setMessage("");
}}
>
CLEAR
</button>
</div>
);
};
export default EventPractice;
import React, { useState } from "react";
const EventPractice = () => {
const [message, setMessage] = useState("");
console.log("message", message);
const handleChange = (e) => {
setMessage(e.target.value);
};
const handleClick = () => {
alert(message);
setMessage("");
};
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="message"
placeholder="아무거나 입력해보세요"
value={message}
onChange={handleChange}
/>
<button onClick={handleClick}>CLEAR</button>
</div>
);
};
export default EventPractice;
import React, { useState } from "react";
const EventPractice = () => {
const [username, setUsername] = useState("");
const [message, setMessage] = useState("");
const onChangeUsername = (e) => setUsername(e.target.value);
const onChangeMessage = (e) => setMessage(e.target.value);
const onClick = () => {
alert(username + ": " + message);
setUsername("");
setMessage("");
};
const onKeyPress = (e) => {
if (e.key === "Enter") {
onClick();
}
};
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="username"
placeholder="사용자명"
value={username}
onChange={onChangeUsername}
/>
<input
type="text"
name="message"
placeholder="아무거나 입력해보세요"
value={message}
onChange={onChangeMessage}
onKeyPress={onKeyPress}
/>
<button onClick={onClick}>CLEAR</button>
</div>
);
};
export default EventPractice;
import React, { useState } from "react";
const EventPractice = () => {
const [form, setForm] = useState({
username: "",
message: "",
});
const { username, message } = form;
const onChange = (e) => {
const nextForm = {
...form,
[e.target.name]: e.target.value,
};
setForm(nextForm);
};
const onClick = () => {
alert(username + ": " + message);
setForm({
username: "",
message: "",
});
};
const onKeyPress = (e) => {
if (e.key === "Enter") onClick();
};
return (
<div>
<h1>이벤트 연습</h1>
<input
type="text"
name="username"
placeholder="사용자명"
value={username}
onChange={onChange}
/>
<input
type="text"
name="message"
placeholder="아무거나 입력해보세요"
value={message}
onChange={onChange}
onKeyPress={onKeyPress}
/>
<button onClick={onClick}>CLEAR</button>
</div>
);
};
export default EventPractice;