We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The text was updated successfully, but these errors were encountered:
はい、このケースではメモリリークを防ぐために、URL.createObjectURL()で作成したオブジェクトURLを適切に解放する処理を追加することをお勧めします。
URL.createObjectURL()
以下のように修正することができます:
"use client"; import { useState, useEffect } from "react"; import { Button } from "./ui/button"; import Image from "next/image"; export default function ImageUploadButton() { const [image, setImage] = useState<File>(); const [previewUrl, setPreviewUrl] = useState<string>(); // imageが変更されたときにプレビューURLを更新 useEffect(() => { if (image) { const objectUrl = URL.createObjectURL(image); setPreviewUrl(objectUrl); // クリーンアップ関数でオブジェクトURLを解放 return () => { URL.revokeObjectURL(objectUrl); }; } }, [image]); function showImage(e: { target: HTMLInputElement }) { if (e.target.files && e.target.files[0]) { setImage(e.target.files[0]); } } return ( <> <Button variant="outline" className="p-0 w-[140px] h-[calc(140px*1.4)]" asChild > <label role="button" tabIndex={0} className="cursor-pointer"> <input type="file" accept="image/*" hidden onChange={showImage} /> {previewUrl ? ( <Image src={previewUrl} alt="" width="140" height={140 * 1.4} className="hover:opacity-70" /> ) : ( "+ upload" )} </label> </Button> </> ); }
主な変更点:
previewUrl という新しいstate変数を追加して、オブジェクトURLを管理します。
previewUrl
useEffect フックを使用して:
useEffect
これらの変更により:
に適切にメモリが解放されます。
このメモリ管理は特に以下の場合に重要です:
この実装により、メモリリークを防ぎ、アプリケーションのパフォーマンスを維持することができます。
Sorry, something went wrong.
feat: ファイル読み込み機能と画像プレビュー機能の実装 #5
5fae5a7
No branches or pull requests
参考
The text was updated successfully, but these errors were encountered: