νΈμν° ν΄λ‘ μ½λ© μ±λ¦°μ§λ₯Ό νκ³ μλλ° μ΄κ²μ κ² ν μ€νΈλ₯Ό ν΄λ³΄λ©΄μ μμν λΆνΈμ¬νμ΄λ λ²κ·Έκ° κ½€ λ§μ΄ λ°κ²¬λλ€. μ΄λ²μ λ°κ²¬ν κ²λ κ·Έλ° κ²λ€ μ€ νλλ€.
λ¬Έμ μν©
μ΄λ―Έμ§μ κ°μ΄, μΆμμ΄1 μ¬μ§μ μ λ‘λ ν μ΄νμ μΆμμ΄2 μ¬μ§μ μ λ‘λ νλ κ²μ λ¬Έμ κ° μμμ§λ§, μΆμμ΄2 μ¬μ§μ μ λ‘λν νμ λ³λμ μλ‘κ³ μΉ¨κ³Ό κ°μ μ‘°μμμ΄ λκ°μ μΆμμ΄2 μ¬μ§μ μ λ‘λνλ €κ³ νλ©΄ νμΌ μ²¨λΆκ° μμ λμ§ μμλ€. λλ νμΌ μ²¨λΆκ° λλ©΄, μμ΄μ½ λ²νΌμ΄ λΉνμ±νλκ³ , μ΄λμμ§λλ‘ ν΄λμλλ° λκ°μ νμΌμ μ°μμΌλ‘ μ λ‘λνλ €κ³ νλ©΄ μ΄κ²μ΄ μ μ©μ΄ λμ§ μλ κ²μ νμΈν μ μλ€. μ¦, μ΄μ μ μ λ‘λν νμΌκ³Ό λκ°μ νμΌμ μ°μμΌλ‘ μ λ‘λν μ μλ λ¬Έμ κ° λ°μνλ€.
μ΄κ²μ onChange μ΄λ²€νΈλ₯Ό ν΅ν΄ input(type=file)μ 첨λΆλ νμΌμ λ³νλ₯Ό κ°μ§νλλ°, μ΄μ νμΌκ³Ό λκ°μ νμΌμ μ λ‘λνλ €κ³ νλ©΄ fileμ΄ λ³νλμ§ μμμΌλ―λ‘ onChangeκ° μ€νλμ§ μλ κ²μ΄λ€.
ν΄κ²°λ°©λ²
onChangeκ° μ€νλ λλ§λ€, 첨λΆν νμΌμ κ°μ§κ³ μλ νλ €λ λ‘μ§μ μννκ³ , λ§μ§λ§μ event.target.valueλ₯Ό λΉμμ€λ€. μ΄λ κ² νλ©΄ μ΄μ κ³Ό λκ°μ νμΌμ 첨λΆνλλΌλ, 무쑰건 λ³νκ° μΌμ΄λκ² λλ―λ‘ νμ μ΄λ²€νΈ ν¨μκ° μ€νλλ€.
μμ€μ½λ
import { useState } from "react";
export default function PostForm() {
const [file, setFile] = useState<File | null>(null);
const onFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
// μλ μννλ €λ λ‘μ§ μν νμ
const { files } = e.target;
if (files && files.length === 1) {
setFile(files[0]);
}
// νμΌμ valueκ°μ λΉμμ€λ€.
e.target.value = "";
};
return (
<form>
<input
onChange={onFileChange}
type="file"
id="file"
accept="image/*"
/>
</form>
);
}