๐ ๋น์ ์ด ์ปดํฌ๋ํธ (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 > fe' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
File API ๋ฅผ ์ด์ฉํ Input ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ (2) | 2022.08.13 |
---|---|
Next.js API Routes ์์๋ณด๊ธฐ (2) | 2022.07.26 |
React ์ปดํฌ๋ํธ(children) ํ์ดํํ๊ธฐ (0) | 2022.07.23 |
React ์ค๋๋ ํด๋ก์ (Stale Closure) ์ด์ ํด๊ฒฐํ๊ธฐ (0) | 2022.05.11 |
React ์ปดํฌ๋ํธ์์ ํ์ด๋จธ ์ค์ ํ๊ธฐ (with Hooks) (0) | 2021.03.02 |
๐ฌ ๋๊ธ