やりたいこと
ローカルにある画像ファイルを選択して、プレビューを表示させたい!
コード
export const UploadImage: React.FC = () = {
const imageHander = (event: ChangeEvent<HTMLInputElement>) => {
if (event.target.files === null) {
return;
}
const file = event.target.files[0];
if (file === null) {
return;
}
let imgTag = document.getElementById("preview") as HTMLImageElement;
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
const result: string = reader.result as string;
imgTag.src = result;
}
};
return (
<div>
<input type="file" accept="image/png, image/jpeg, image/gif" onChange={imageHander} />
<img id="preview" src=""></img>
</div>
);
}
解説
let imgTag = document.getElementById("preview") as HTMLImageElement;
ここでは、HTMLImageElement
に型を変換しています。これは、デフォルトではdocument.getElementById("preview")
の型がHTMLElement | null
となっており、このままではsrc
パラメータの設定ができないからです。
reader.onload = () => {
const result: string = reader.result as string;
imgTag.src = result;
}
ここではreader.result
の型をstring
に変換しています。これは、デフォルトではreader.result
の型がstring | ArrayBuffer | null
となっており、新たなsrc
の値として与えることができないためです。