๋ฐ์ํ
๐ฏ ๋ฆฌ์กํธ์์ ์ด๋ฒคํธ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
- ๋ฆฌ์กํธ์์ ์ด๋ฒคํธ์ ์ด๋ฆ์ ์นด๋ฉ(Camel) ํ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ค.
- ๋ฌธ์์ด์ด ์๋ JSX ํจ์๋ช ์ผ๋ก ์ ๋ฌํ๋ค. (onClick={ํจ์๋ช })
๐ ์ด๋ฒคํธ ์ฒ๋ฆฌ(ํธ๋ค๋ง) ๋ฐฉ๋ฒ
- ์ด๋ฒคํธ๋ฅผ ์คํํ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์๋๋ผ ์๋ onClick์ฒ๋ผ ํจ์์ ํํ๋ก ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
๐ ํธ๋ค๋ง ํจ์ ์ ์ธ
|
const App = () => { |
|
const handleClick = () => { |
|
alert("ํด๋ฆญํ์ต๋๋ค."); |
|
} |
|
return ( |
|
<div> |
|
<button onClick={handleClick}>ํด๋ฆญํ์ธ์</button> |
|
</div> |
|
); |
|
}; |
- ๋ณ๋์ ํธ๋ค๋ง ํจ์๋ฅผ ์ ์ธํ๊ณ Element์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ๋ฒ
๐ ์ต๋ช ํจ์๋ก ์ฒ๋ฆฌ
|
const App = () => { |
|
return ( |
|
<div> |
|
<button onClick={() => { alert('ํด๋ฆญํ์ต๋๋ค.') }}>ํด๋ฆญํ์ธ์</button> |
|
</div> |
|
) |
|
} |
- ์ด๋ฒคํธ๋ฅผ ํ ๋นํ๋ ๋ถ๋ถ์์ ์ต๋ช ํจ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
๐ ์ด๋ฒคํธ ๊ฐ์ฒด
|
const App = () => { |
|
const handleChange = (event) => { |
|
console.log(event.target.value + "๋ผ๊ณ ์ ๋ ฅํ์ จ๋ค์."); |
|
} |
|
return ( |
|
<div> |
|
<input onChange={handleChange} /> |
|
</div> |
|
); |
|
}; |
- DOM Element์ ๊ฒฝ์ฐ ํธ๋ค๋ง ํจ์์ ์ด๋ฒคํธ object๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ๋ค.
- ์ด๋ฒคํธ object๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฒคํธ ๋ฐ์ ์์ธ, ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ Element์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
- ์ด๋ฒคํธ ํํ(ํด๋ฆญ, ํค ์ ๋ ฅ ๋ฑ)์ DOM ์ข ๋ฅ(button, form, input ๋ฑ)์ ๋ฐ๋ผ ์ ๋ฌ๋๋ ์ด๋ฒคํธ object์ ๋ด์ฉ๋ ๋ค๋ฅด๋ ์ ์ํ ๊ฒ.
๐ DOM์์์๋ง ์ด๋ฒคํธ ์ค์ ๊ฐ๋ฅ
|
// ์ด๋ ๊ฒ ์ฌ์ฉ ๋ชป ํ๋ค. |
|
<EventPractice onLoad={ ()=> { console.log("test"); } }/> |
- ์ง์ ๋ง๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์๋ ์ด๋ฒคํธ๋ฅผ ์์ฒด์ ์ผ๋ก ์ค์ ํ ์ ์๋ค.
- <div> <button> <p> <input> ๋ฑ DOM์์์๋ง ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ ๋ง์ด ์ฐ์ด๋ DOM ์ด๋ฒคํธ
- onClick : Element๋ฅผ ํด๋ฆญํ์ ๋
- onChange : Element์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์์ ๋(input์ ํ ์คํธ๋ฅผ ๋ณ๊ฒฝ, ํ์ผ ์ ํ ๋ฑ)
- onKeyDown, onKeyUp, onKeyPress : ํค๋ณด๋ ์ ๋ ฅ์ด ์ผ์ด๋ฌ์ ๋
- onDoubleClick : Element๋ฅผ ๋๋ธ ํด๋ฆญํ์ ๋
- onFocus : Element์ Focus ๋์์ ๋
- onBlur : Element๊ฐ Focus๋ฅผ ์์์ ๋
- onSubmit : Form Element์์ Submit ํ์ ๋
๐ ์ปดํฌ๋ํธ ๋ด ์ด๋ฒคํธ ์ฒ๋ฆฌ
๐ DOM ๋ฒํผ ํด๋ฆญ
|
const App = () => { |
|
const handleClick = () => { |
|
alert("ํด๋ฆญํ์ต๋๋ค."); |
|
} |
|
return ( |
|
<div> |
|
<button onClick={handleClick}>ํด๋ฆญํ์ธ์</button> |
|
</div> |
|
); |
|
}; |
๐ DOM Input ๊ฐ์ State์ ์ ์ฅํ๊ธฐ
|
const App = () => { |
|
const [inputValue, setInputValue] = useState("defaultValue"); |
|
const handleChange = (event) => { |
|
setInputValue(event.target.value); |
|
} |
|
return ( |
|
<div> |
|
<input onChange={hadleChange} defaultValue={inputValue} /> |
|
<br /> |
|
์ ๋ ฅํ ๊ฐ์: {inputValue} |
|
</div> |
|
); |
|
}; |
- event object์ target์ ์ด๋ฒคํธ์ ์์ธ์ด ๋๋ Element๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ํ์ฌ event์ target์ input element์ด๋ฏ๋ก ์ ๋ ฅ๋ value๋ฅผ ๊ฐ์ ธ์ setState๋ฅผ ํ๋ ๋ชจ์ต์ด๋ค.
๐ ์ฌ๋ฌ Input ๋์์ ์ฒ๋ฆฌํ๊ธฐ, ํ ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ๋ฌ Element์ ์ฌ์ฌ์ฉํ๊ธฐ :: object์ key๋ฅผ ๋์ ์ผ๋ก ํ ๋น
|
const App = () => { |
|
const [user, setUser] = useState({ |
|
name; "์ฒ ์", |
|
school: "ํ๊ตญ๋ํ๊ต" |
|
}); |
|
|
|
const handleChange = (event) => { |
|
const { name, value } = event.target; |
|
|
|
// ๋ฐฉ๋ฒ 1 |
|
// const newUser = { ...user }; |
|
// newUser[name] = value; |
|
// setUser(newUser); |
|
|
|
// ๋ฐฉ๋ฒ 2 |
|
setUser((current) => { |
|
const newUser = {...current}; |
|
newUser[name] = value; |
|
return newUser; |
|
}) |
|
}; |
|
|
|
return ( |
|
<div> |
|
<input name="name" onChange={handleChange} value={user.name} /> |
|
<br /> |
|
<input name="school" onChange={handleChange} value={user.school} /> |
|
<p> |
|
{user.name}๋์ {user.school}์ |
|
์ฌํ์ค์ ๋๋ค. |
|
</p> |
|
</div> |
|
); |
|
}; |
- State๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ธํ ์๋ ์์ง๋ง object๋ฅผ ํ์ฉํ์ฌ ์ฌ๋ฌ ๊ฐ์ input์ state๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
- target์ผ๋ก๋ถํฐ name์ ๋ฐ์์ ํด๋น name์ key์ ํด๋นํ๋ value๋ฅผ ๋ณ๊ฒฝํ์ฌ state์ ๋ฐ์ํ๋ค.
๐ ์ปดํฌ๋ํธ ๊ฐ ์ด๋ฒคํธ ์ ๋ฌํ๊ธฐ
|
// ์์ |
|
const MyForm = ({ onChange }) => { |
|
return ( |
|
<div> |
|
<span>์ด๋ฆ: </span> |
|
<input onChange={onChange} /> |
|
</div> |
|
) |
|
} |
|
// ๋ถ๋ชจ |
|
const App = () => { |
|
const [username, setUsername] = useState('') |
|
return ( |
|
<div> |
|
<h1>{username}๋ ํ์ํฉ๋๋ค.</h1> |
|
<MyForm onChange={(event) => { setUsername(event.target.value) } }/> |
|
</div> |
|
) |
|
} |
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ๋ณด๋ฅผ ํ์ฌ ์ปดํฌ๋ํธ๊ฐ ์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ํ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ์์์ ๊ฐ์ด ์ด๋ฒคํธ๋ฅผ Props๋ก ์ ๋ฌํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ์ปค์คํ ์ด๋ฒคํธ
|
const SOS = ({onSOS}) => { |
|
const [count, setCount] = useState(0); |
|
|
|
const handleClick = () => { |
|
if(count >= 2) { |
|
onSOS(); |
|
} |
|
setCount(count + 1); |
|
} |
|
|
|
return <button onClick={handleClick}>์ธ ๋ฒ ๋๋ฅด๋ฉด ๊ธด๊ธํธ์ถ({count})</button> |
|
} |
|
const App = () => { |
|
return ( |
|
<div> |
|
<SOS onSOS={() => { alert("๊ธด๊ธ์ฌํ!"); }} /> |
|
</div> |
|
); |
|
}; |
- ๋จ์ํ DOM ์ด๋ฒคํธ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋์ด์ ๋๋ง์ ์ด๋ฒคํธ๋ฅผ ๋ง๋ค ์๋ ์๋ค.
๐ ์ด๋ฒคํธ ๋ช ๋ช ๋ฒ
|
const App = () => { |
|
const handleClick = () => { |
|
alert("ํด๋ฆญํ์ต๋๋ค."); |
|
} |
|
|
|
return ( |
|
<div> |
|
<button onClick={handleClick}>ํด๋ฆญํ์ธ์</button> |
|
</div> |
|
); |
|
}; |
- ์ง์ ์ด๋ฒคํธ๋ฅผ ๋ง๋ค ๋์๋ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ค์ ํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋ณดํต์ ์ฝ๋๋ฅผ ์ฝ์ ๋ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์๋๋ก on + ๋์ฌ ๋๋ on + ๋ช ์ฌ + ๋์ฌ ํํ๋ก ์์ฑํ๋ค.
- ์์: onClick, onButtonClick, onInputChange
- ํธ๋ค๋ง ํจ์์ ๊ฒฝ์ฐ ๋ง์ฐฌ๊ฐ์ง๋ก handle + ๋์ฌ ๋๋ handle + ๋ช ์ฌ + ๋์ฌ์ ํํ๋ก ์์ฑํ๋ฉฐ, handle ๋์ ์ด๋ฒคํธ๋ช ๊ณผ ๋์ผํ on์ ์์ ๋ถ์ฌ๋ ๋ฌด๋ฐฉํ๋ค.
๋ฐ์ํ
'Frontend๐ฑ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ Props (0) | 2023.04.20 |
---|---|
[React] ๋ฆฌ์กํธ State๋? (0) | 2023.04.20 |
React-์ด๋ฒคํธ ํธ๋ค๋ง(onChange, onClick, input ์ฌ๋ฌ ๊ฐ, onKeyPress) (0) | 2023.04.20 |
[๋ฆฌ์กํธ] Router ํ์ด์ง ์ด๋์ ๋ํด์ ๋ค์ด๋ณธ ์ ์๋..? (0) | 2023.04.18 |
[๊ฟํ] ๊ถ๊ธํ๊ฒ ์์ด์.. ํ์ดํ ํจ์๊ฐ ๋๋์ฒด ๋ญ์์...???!๐ (2) | 2023.04.18 |