
๐ ๋น์ ์ด ์ปดํฌ๋ํธ (uncontrolled component)
๋น์ ์ด ์ปดํฌ๋ํธ ์์ ํผ ๋ฐ์ดํฐ๋ DOM ์์ฒด์ ์ ์ฅ๋ฉ๋๋ค.
๋ง์ฝ ํด๋น ํผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ณ ์ถ๋ค๋ฉด ref ๋ฅผ ์ด์ฉํด์ ๊ฐ์ PULL ํด์์ ์ฌ์ฉํฉ๋๋ค.
import React, { useRef } from 'react'
const UnControlledComponent = () => {
const inputRef = useRef(null)
const handleClick = () => {
/** input ๊ฐ์ผ๋ก ํน์ ๋ก์ง์ ์ํํฉ๋๋ค. */
console.log(inputRef.current.value)
}
return (
<div>
<input type="text" ref={inputRef} />
<button onClick={handleClick} >ํ์ธ</button>
</div>
)
}
export default UnControlledComponent
๐ ์ ์ด ์ปดํฌ๋ํธ (controlled component)
์ ์ด ์ปดํฌ๋ํธ ๋ ๋ณด๋ค React์ค๋ฌ์ด ๋ฐฉ๋ฒ ์ผ๋ก ๊ฐ์ ์ ์ดํฉ๋๋ค.
React ์ปดํฌ๋ํธ์ ์ํ๊ฐ์ ์ ๋ขฐ ๊ฐ๋ฅํ ๋จ์ผ ์ถ์ฒ (single source of truth) ๋ก ๋ง๋ค์ด ์ฌ์ฉํฉ๋๋ค.
ํผ ์
๋ ฅ ์ปดํฌ๋ํธ์ value ๊ฐ ํด๋น ์ปดํฌ๋ํธ์ state ์์ ๊ด๋ฆฌ๋๋ฉฐ ๋๊ธฐํ๋๋ ๋ฐฉ์์
๋๋ค.
import React, { useState } from 'react'
const ControlledComponent = () => {
const [ name, setName ] = useState('')
const handleChange = (event) => {
setName(event.target.value )
}
return (
<div>
<input type="text" value={name} onChange={handleChange} />
</div>
)
}
export default ControlledComponent
์
๋ ฅ๊ฐ์ ๋ณํ๊ฐ ์๊ธธ๋๋ง๋ค handleChange ํจ์๊ฐ ํธ์ถ๋์ด ์ํ๊ฐ์ด ๋ณํํ๊ณ
์ด๋๋ฌธ์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํด ์๋ก์ด ์ํ๊ฐ์ด input ์์์ ๋ฐ์ธ๋ฉ ๋๋ ๊ฒ์
๋๋ค.
์ด๋ ๊ฒ ์๋ก์ด ๊ฐ์ PUSH ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ํผ ์๋ฆฌ๋จผํธ๋ฅผ ์ ์ด ์ปดํฌ๋ํธ ๋ผ๊ณ ํ๋ฉฐ
์ฃผ๋ก ์ ๋ ฅ๊ฐ์ ์ฆ๊ฐ์ ์ธ ๋ณํ์ ๋์ํ๋ ๋ก์ง์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
* ์
๋ ฅ๊ฐ ๊ฒ์ฆ (ํ์ ๋ฐ ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ)
* ์ ํจํ ๊ฐ์ธ์ง ๊ฒ์ฆ ํ ๋ฒํผ ํ์ฑํ ๋ฑ์ ์ํฉ
๐ ๋ ์ค ์ด๋๊ฒ์ ์ฌ์ฉํด์ผํ ๊น?
useRef ๋ฅผ ํตํด ๋น์ ์ด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌด์กฐ๊ฑด ๋์ ๊ฒ์ ์๋๋๋ค.
๋์ ๋ฐ๋ผ์๋ ๊ฐ๋ณ๊ณ ๊ฐ๋จํ ํผ ์๋ฆฌ๋จผํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋น์ ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ฉํ ์๋ ์์ต๋๋ค.
์ด์ ๊ด๋ จํด์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ค ๊ฒฝ์ฐ์ ์ ์ด ํน์ ๋น์ ์ด ์ปดํฌ๋ํธ ๋ฅผ ์ฌ์ฉํด์ผํ ์ง
์งํ๊ฐ ๋ ์ ์๋ ์๋ฃ๊ฐ ์์ด์ ์ฐธ๊ณ ํ์ฌ ํ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.

๐ ์ฐธ๊ณ ์๋ฃ
Controlled and uncontrolled form inputs in React don't have to be complicated - Gosha Arinich
'๐จโ๐ป web.dev > frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [TypeScript] enum ๊ณผ union type, ์ธ์ ์จ์ผํ ๊น? (2) | 2022.07.09 |
|---|---|
| React ์ค๋๋ ํด๋ก์ (Stale Closure) ์ด์ ํด๊ฒฐํ๊ธฐ (0) | 2022.05.11 |
| [JavaScript] Array.sort ๋ ์์ ์ฑ์ ๋ณด์ฅํ ๊น? (0) | 2022.03.09 |
| [TypeScript] js.map ํ์ผ์ ๋ฌด์์ผ๊น? (0) | 2022.03.07 |
| [JavaScript] Object.defineProperty ์ ๋ํด์ (0) | 2022.03.06 |
๐ฌ ๋๊ธ