- ๋ฆฌ์กํธ์์ ์ด๋ฒคํธ ํธ๋ค๋ง์ HTML๊ณผ '๋น์ท'ํ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ JSX ์์์ props๋ก ์ ๋ฌ๋๋ฉฐ, ํจ์ ํํ๋ก ์์ฑ ๋ฉ๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์ ์ ์
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ด๋ฒคํธ์ ์ฐ๊ฒฐ
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์์์ ์ํ ์
๋ฐ์ดํธ
import React, {useState} from "react";
const EventHandler = () => {
const [message,setMessage] = useState("์๋
ํ์ธ์."); // ๊ฐ์ด ์๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์ํ๊ฐ ๋ณํ๋์ง ํ๋จํจ.
const changeMessage= (e) => {
setMessage(e.target.value);
}
return (
<>
<h1>์ด๋ฒคํธ ์ฐ์ต</h1>
<input type="text" name="message" placeholder="์์ ๋กญ๊ฒ ์
๋ ฅํ์ธ์." onChange={changeMessage}/>
<h2>์
๋ ฅ ๋ฐ์ ๋ฉ์์ง : {message}</h2>
</>
);
}
export default EventHandler;
โ๏ธ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์์ฌํญ
- ์ด๋ฒคํธ ์ด๋ฆ์ Camel ํ๊ธฐ๋ฒ์ผ๋ก ์์ฑ ํฉ๋๋ค.
๐ ์) HTML์ onclick์ ๋ฆฌ์กํธ์์๋ onClick์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.
- ์ด๋ฒคํธ์ ์คํํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ํจ์ ํํ์ ๊ฐ์ ์ ๋ฌ ํฉ๋๋ค.
๐ HTML์์ ์ด๋ฒคํธ๋ฅผ ์ค์ ํ ๋๋ ํฐ๋ฐ์ดํ ์์ ์คํํ ์ฝ๋๋ฅผ ๋ฃ์์ง๋ง.. ๋ฆฌ์กํธ์์๋ ํจ์ ํํ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ ๋ฌ ํฉ๋๋ค.
๐ ํ์ดํ ํจ์ ๋ฌธ๋ฒ์ผ๋ก ํจ์๋ฅผ ๋ง๋ค์ด๋ ๋๊ณ , ๋ ๋๋ง ์ธ๋ถ์ ํจ์๋ฅผ ๋ง๋ค์ด ์ ๋ฌํด๋ ๋ฉ๋๋ค.
- DOM ์์์๋ง ์ด๋ฒคํธ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
๐ div, button, input, form, span ๋ฑ์ DOM ์์์๋ ์ด๋ฒคํธ๋ฅผ ์ค์ ํ ์ ์์ง๋ง, ์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋ ์ปดํฌ๋ํธ์๋ ์ด๋ฒคํธ๋ฅผ ์์ฒด์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- ํจ์๋ ํจ์๋ช
๋ง ์ ์ธํด์ค๋๋ค.
์์. HTML
<button onclick="activateLasers()">
Activate Lasers
</button>f
์์. React
<button onClick={activateLasers}>
Activate Lasers
</button>
OnChange
import React, {useState} from "react";
const EventHandler = () => {
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);
// input ์ฐฝ์ ์ง์ฐ๊ธฐ ์ํด ๋น ๊ฐ ์ง์ .. -> ๋น์์ง ํ ๋ ๋๋ง
setUserName("");
setMessage("");
}
const onKeyPress = e => {
if(e.key === "Enter") onClick();
}
return (
<>
<h1>์ด๋ฒคํธ ์ฐ์ต</h1>
<input type="text" name="userName" placeholder="์ฌ์ฉ์ ์ด๋ฆ" value={userName}
onChange={onChangeUserName}/>
<input type="text" name="message" placeholder="๋ฉ์์ง ๋ด์ฉ" value={message}
onChange={onChangeMessage} onKeyDown={onKeyPress}/>
<button onClick={onClick}>ํ์ธ</button>
</>
);
}
export default EventHandler;
SelectBox
import React, {useState} from "react";
// Select ์ฝค๋ณด ๋ฐ์ค ์ฌ์ฉํ๊ธฐ
const FruitSelect = () => {
const [value, setValue] = useState("๐");
const handleChange = e => setValue(e.target.value);
const handleSubmit = e => {
alert("์ ํํ ๊ณผ์ผ : " + value);
e.preventDefault(); // โจ ์ฐฝ์ด ์๋ก๊ณ ์นจ ๋๋ ๊ฒ์ ๋ง์.
}
return (
<form onSubmit={handleSubmit}>
<label>
๊ณผ์ผ์ ์ ํํ์ธ์.๐ฉท <br />
<select value={value} onChange={handleChange}>
<option value="apple">๐</option>
<option value="orange">๐</option>
<option value="banana">๐</option>
<option value="kiwi">๐ฅ</option>
<option value="blueberry">๐ซ</option>
<option value="grape">๐</option>
</select>
</label>
<button type="submit">์ ์ถ</button>
</form>
);
}
export default FruitSelect;
RadioBox
import React, {useState} from "react";
const RadioButton = () => {
const [value, setValue] = useState("");
const handleChange = e => setValue(e.target.value);
return (
<div>
<input type="radio" name="fruits" value="๐" onChange={handleChange} />
<label>๐</label>
<br />
<input type="radio" name="fruits" value="๐" onChange={handleChange} />
<label>๐</label>
<br />
<input type="radio" name="fruits" value="๐" onChange={handleChange} />
<label>๐</label>
<br />
<input type="radio" name="fruits" value="๐ฅ" onChange={handleChange} />
<label>๐ฅ</label>
<br />
<p>์ ํํ ๊ณผ์ผ์ [{value}] ์
๋๋ค.</p>
</div>
);
}
export default RadioButton;
Table(ํ) - ๊ธฐ๋ณธ
import React from "react";
import './App.css';
// โจ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ์ map์ผ๋ก ํ๋ฉด์ ํ์ํ๊ณ , ํ์๋ ํ๋ฉด ์์ญ์ ์ด๋ฒคํธ ์ฐ๊ฒฐํ๊ธฐ
const TableMap = () => {
const data = [
{id: 100, name: "Elon", age: 38},
{id: 200, name: "Skat", age: 25},
{id: 300, name: "Braven", age: 15}
];
const tableClickEvent = (item) => {
console.log(item); // ๋๋ ์ ๋ ํน์ ํ์ด์ง(๋ฉ๋ด)๋ก ๋์ด๊ฐ๋ ๋ฐฉ๋ฒ์ '๋ผ์ฐํฐ' ํ ๋ ๋ฐฐ์ธ ์์
}
return (
<table>
<thead>
<tr>
<th>ID</th>
<th>์ด๋ฆ</th>
<th>๋์ด</th>
</tr>
</thead>
<tbody>
{
data.map(item => (
// โจ map์ key๊ฐ ๊ธฐ์ค์ผ๋ก ๋ด๋ถ๋ฅผ ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ ์ผํ id๊ฐ์ ๋ฃ์ด์ค์ผ ํจ.
<tr key={item.id} onClick={()=>tableClickEvent(item)}>
<td>{item.id}</td>
<td>{item.name}</td>
<td>{item.age}</td>
</tr>
))
}
</tbody>
</table>
);
}
export default TableMap;
Table(ํ) - ์ค์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ํํ๋ก ๋ณ๊ฒฝ
import { useState, useEffect} from "react";
import "./App.css";
// ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌ๋ฐ์ map์ผ๋ก ํ๋ฉด์ ํ์ํ๊ณ , ํ์๋ ํ๋ฉด ์์ญ์ ์ด๋ฒคํธ ์ฐ๊ฒฐํ๊ธฐ
const TableMap = () => {
const data = [
{id : 100, name : "์นด์ฆํ", age : 21},
{id : 200, name : "์ ๋", age : 21},
{id : 300, name : "์์ ์ง", age : 21}
];
const [mapData, setMapData] = useState("");
useEffect(() => {
setMapData(data);
},[]);
const tableClickEvent = (item) => {
console.log(item);
}
return(
<table>
<thead>
<tr>
<th>ID</th>
<th>์ด๋ฆ</th>
<th>๋์ด</th>
</tr>
</thead>
<tbody>
{mapData && mapData.map(item => (
<tr key={item.id} onClick={()=>tableClickEvent(item)}>
<td>{item.id}</td>
<td>{item.name}</td>
<td>{item.age}</td>
</tr>
))}
</tbody>
</table>
);
}
export default TableMap;