Get image preview before uploading in React

前端 未结 9 1742
醉梦人生
醉梦人生 2020-12-04 17:51

Many examples of this on here but can\'t seem to find any for react. I have managed to convert the vanilla js to react but getting an error.

The answer looks simple

9条回答
  •  甜味超标
    2020-12-04 18:48

    Extending on Cels' answer, and avoiding memory leaks with createObjectURL as @El Anonimo warns about, we could use useEffect to create the preview and clean up after the component unmounts like so

    useEffect(() => {
       // create the preview
       const objectUrl = URL.createObjectURL(selectedFile)
       setPreview(objectUrl)
    
       // free memory when ever this component is unmounted
       return () => URL.revokeObjectURL(objectUrl)
    }, [selectedFile])
    

    The full code could look something like this

    export const ImageUpload = () => {
        const [selectedFile, setSelectedFile] = useState()
        const [preview, setPreview] = useState()
    
        // create a preview as a side effect, whenever selected file is changed
        useEffect(() => {
            if (!selectedFile) {
                setPreview(undefined)
                return
            }
    
            const objectUrl = URL.createObjectURL(selectedFile)
            setPreview(objectUrl)
    
            // free memory when ever this component is unmounted
            return () => URL.revokeObjectURL(objectUrl)
        }, [selectedFile])
    
        const onSelectFile = e => {
            if (!e.target.files || e.target.files.length === 0) {
                setSelectedFile(undefined)
                return
            }
    
            // I've kept this example simple by using the first image instead of multiple
            setSelectedFile(e.target.files[0])
        }
    
        return (
            
    {selectedFile && }
    ) }

提交回复
热议问题