<input type="text"/> // ํ
์คํธ ์
๋ ฅ
<input type="range"/> // ์ฌ๋ผ์ด๋
<input type="date"/> // ๋ ์ง ์ ํ
<input type="number"/> // ์ซ์ ์
๋ ฅ
<textarea></textarea> // ์ฌ๋ฌ ์ค ํ
์คํธ
<select></select> // ๋๋กญ๋ค์ด ์ ํ
<input onChange={()=>{ ์คํํ ์ฝ๋ }}/>
onChange ๋๋ onInput: ์
๋ ฅ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฝ๋ ์คํ ๐onMouseOver, onScroll ๋ฑ ๋ค์ํ๊ฒ ์กด์ฌ ๐ฑ๏ธ<input onChange={(e)=>{ console.log(e.target.value) }}/>
e๋ฅผ ํตํด ํ์ฌ ์
๋ ฅ๊ฐ์ ์ ๊ทผ ๐e.target.value: ํ์ฌ input์ ์
๋ ฅ๋ ๊ฐ ๐e.target: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์e.preventDefault(): ๊ธฐ๋ณธ ๋์ ๋ฐฉ์งe.stopPropagation(): ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ๋ฐฉ์งfunction App() {
let [์
๋ ฅ๊ฐ, ์
๋ ฅ๊ฐ๋ณ๊ฒฝ] = useState('');
return (
<input onChange={(e)=>{
์
๋ ฅ๊ฐ๋ณ๊ฒฝ(e.target.value);
console.log(์
๋ ฅ๊ฐ);
}} />
)
}
'')๋ก state ์ด๊ธฐํ ๐ onChange ์ด๋ฒคํธ์์ ์
๋ ฅ๊ฐ์ state๋ก ์
๋ฐ์ดํธ ๐setState ํจ์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋จ โ ๏ธfunction App() {
let [๊ธ์ ๋ชฉ, ๊ธ์ ๋ชฉ๋ณ๊ฒฝ] = useState(['๋จ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ๋
ํ']);
let [์
๋ ฅ๊ฐ, ์
๋ ฅ๊ฐ๋ณ๊ฒฝ] = useState('');
return (
<div>
<div className="publish">
<input onChange={(e)=>{ ์
๋ ฅ๊ฐ๋ณ๊ฒฝ(e.target.value) }} />
<button onClick={()=>{
// 1. ๊ธฐ์กด ๊ธ์ ๋ชฉ ๋ฐฐ์ด ๋ณต์ฌ
let copy = [...๊ธ์ ๋ชฉ];
// 2. ๋ณต์ฌํ ๋ฐฐ์ด์ ์ ๊ธ ์ถ๊ฐ
copy.unshift(์
๋ ฅ๊ฐ);
// 3. state ์
๋ฐ์ดํธ
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy);
// 4. input ์ด๊ธฐํ
์
๋ ฅ๊ฐ๋ณ๊ฒฝ('');
}}>๋ฐํ</button>
</div>
{/* ๊ธ ๋ชฉ๋ก ํ์ */}
{
๊ธ์ ๋ชฉ.map(function(a, i) {
return (
<div className="list" key={i}>
<h4>{a}</h4>
<p>2์ 18์ผ ๋ฐํ</p>
</div>
)
})
}
</div>
)
}
function App() {
let [๊ธ์ ๋ชฉ, ๊ธ์ ๋ชฉ๋ณ๊ฒฝ] = useState(['๋จ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ๋
ํ']);
let [์
๋ ฅ๊ฐ, ์
๋ ฅ๊ฐ๋ณ๊ฒฝ] = useState('');
return (
<div>
{/* ์
๋ ฅ ๋ถ๋ถ ์๋ต */}
{/* ๊ธ ๋ชฉ๋ก๊ณผ ์ญ์ ๋ฒํผ */}
{
๊ธ์ ๋ชฉ.map(function(a, i) {
return (
<div className="list" key={i}>
<h4>{a}</h4>
<p>2์ 18์ผ ๋ฐํ</p>
<button onClick={()=>{
// 1. ๊ธฐ์กด ๋ฐฐ์ด ๋ณต์ฌ
let copy = [...๊ธ์ ๋ชฉ];
// 2. i๋ฒ์งธ ์์ ์ญ์
copy.splice(i, 1);
// 3. state ์
๋ฐ์ดํธ
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy);
}}>์ญ์ </button>
</div>
)
})
}
</div>
)
}
Claude.ai ์์ ์ ์ํ ๊ฐ์์์ ๋ณด์ถฉํ๋ฉด ์ข์ ๋ด์ฉ
๋ฆฌ์กํธ ๋ฐฉ์ ์ค๋ช ๋ถ์กฑ: ๊ฐ์์์๋ input ์ฒ๋ฆฌ๊ฐ ์ผ๋ฐ JavaScript์ ๋น์ทํ๋ค๊ณ ์ค๋ช ํ์ง๋ง, React์์ ๊ถ์ฅํ๋ ์ ์ด ์ปดํฌ๋ํธ(Controlled Component) ๊ฐ๋ ์ ๋ํ ์ค๋ช ์ด ๋ถ์กฑํฉ๋๋ค. โ ๏ธ
์๋ฐฉํฅ ๋ฐ์ธ๋ฉ ๋๋ฝ: input์ value ์์ฑ์ state์ ์ฐ๊ฒฐํ์ฌ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช
์ด ์์ต๋๋ค. ์ด๋ก ์ธํด ์
๋ ฅ ํ๋ ์ด๊ธฐํ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๐
ํผ ์ ์ถ ์ฒ๋ฆฌ ๋ฏธ์ค๋ช
: ์ผ๋ฐ์ ์ผ๋ก ์
๋ ฅ์ ํผ ๋ด์์ ์ด๋ฃจ์ด์ง๋ฉฐ, onSubmit ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ํผ ๊ธฐ๋ณธ ๋์ ๋ฐฉ์ง(e.preventDefault())์ ๋ํ ์ค์ ํ์ฉ ์์๊ฐ ๋ถ์กฑํฉ๋๋ค. ๐
function App() {
let [๊ธ์ ๋ชฉ, ๊ธ์ ๋ชฉ๋ณ๊ฒฝ] = useState(['๋จ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ๋
ํ']);
let [์
๋ ฅ๊ฐ, ์
๋ ฅ๊ฐ๋ณ๊ฒฝ] = useState('');
return (
<div>
<div className="publish">
{/* value ์์ฑ์ state์ ์ฐ๊ฒฐ */}
<input
value={์
๋ ฅ๊ฐ}
onChange={(e)=>{ ์
๋ ฅ๊ฐ๋ณ๊ฒฝ(e.target.value) }}
/>
<button onClick={()=>{
// ๋น ๊ฐ์ด ์๋ ๋๋ง ์ถ๊ฐ
if (์
๋ ฅ๊ฐ.trim() !== '') {
let copy = [...๊ธ์ ๋ชฉ];
copy.unshift(์
๋ ฅ๊ฐ);
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy);
์
๋ ฅ๊ฐ๋ณ๊ฒฝ(''); // input ์ด๊ธฐํ ์๋
}
}}>๋ฐํ</button>
</div>
{/* ๋๋จธ์ง ์ฝ๋ ์๋ต */}
</div>
)
}
value={์
๋ ฅ๊ฐ}: input์ ๊ฐ์ state์ ์ฐ๊ฒฐํ์ฌ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ ๊ตฌํ ๐function App() {
let [๊ธ์ ๋ชฉ, ๊ธ์ ๋ชฉ๋ณ๊ฒฝ] = useState(['๋จ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ๋
ํ']);
let [์
๋ ฅ๊ฐ, ์
๋ ฅ๊ฐ๋ณ๊ฒฝ] = useState('');
// ํผ ์ ์ถ ์ฒ๋ฆฌ ํจ์
const handleSubmit = (e) => {
e.preventDefault(); // ํ์ด์ง ์๋ก๊ณ ์นจ ๋ฐฉ์ง
if (์
๋ ฅ๊ฐ.trim() !== '') {
let copy = [...๊ธ์ ๋ชฉ];
copy.unshift(์
๋ ฅ๊ฐ);
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy);
์
๋ ฅ๊ฐ๋ณ๊ฒฝ('');
}
};
return (
<div>
<form onSubmit={handleSubmit}>
<input
value={์
๋ ฅ๊ฐ}
onChange={(e)=>{ ์
๋ ฅ๊ฐ๋ณ๊ฒฝ(e.target.value) }}
/>
<button type="submit">๋ฐํ</button>
</form>
{/* ๋๋จธ์ง ์ฝ๋ ์๋ต */}
</div>
)
}
onSubmit ์ด๋ฒคํธ ์ฌ์ฉ์ผ๋ก Enter ํค ์
๋ ฅ์ผ๋ก๋ ์ ์ถ ๊ฐ๋ฅ โจ๏ธe.preventDefault()๋ก ํผ ์ ์ถ ์ ํ์ด์ง ์๋ก๊ณ ์นจ ๋ฐฉ์ง โ ๏ธfunction App() {
let [๊ธ์ ๋ชฉ, ๊ธ์ ๋ชฉ๋ณ๊ฒฝ] = useState(['๋จ์์ฝํธ ์ถ์ฒ', '๊ฐ๋จ ์ฐ๋๋ง์ง', 'ํ์ด์ฌ๋
ํ']);
let [์
๋ ฅ๊ฐ, ์
๋ ฅ๊ฐ๋ณ๊ฒฝ] = useState('');
let [์ค๋ฅ๋ฉ์์ง, ์ค๋ฅ๋ฉ์์ง๋ณ๊ฒฝ] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
// ์ ํจ์ฑ ๊ฒ์ฌ
if (์
๋ ฅ๊ฐ.trim() === '') {
์ค๋ฅ๋ฉ์์ง๋ณ๊ฒฝ('๊ธ ์ ๋ชฉ์ ์
๋ ฅํด์ฃผ์ธ์');
return;
}
if (์
๋ ฅ๊ฐ.length > 20) {
์ค๋ฅ๋ฉ์์ง๋ณ๊ฒฝ('๊ธ ์ ๋ชฉ์ 20์ ์ด๋ด๋ก ์์ฑํด์ฃผ์ธ์');
return;
}
// ์ ํจ์ฑ ๊ฒ์ฌ ํต๊ณผ ์
let copy = [...๊ธ์ ๋ชฉ];
copy.unshift(์
๋ ฅ๊ฐ);
๊ธ์ ๋ชฉ๋ณ๊ฒฝ(copy);
์
๋ ฅ๊ฐ๋ณ๊ฒฝ('');
์ค๋ฅ๋ฉ์์ง๋ณ๊ฒฝ('');
};
return (
<div>
<form onSubmit={handleSubmit}>
<input
value={์
๋ ฅ๊ฐ}
onChange={(e)=>{
์
๋ ฅ๊ฐ๋ณ๊ฒฝ(e.target.value);
์ค๋ฅ๋ฉ์์ง๋ณ๊ฒฝ(''); // ์
๋ ฅ ์ ์ค๋ฅ ๋ฉ์์ง ์ด๊ธฐํ
}}
/>
<button type="submit">๋ฐํ</button>
{์ค๋ฅ๋ฉ์์ง && <p className="error">{์ค๋ฅ๋ฉ์์ง}</p>}
</form>
{/* ๋๋จธ์ง ์ฝ๋ ์๋ต */}
</div>
)
}