gpt4 book ai didi

javascript - 在 React 中上传之前获取图像预览

转载 作者:可可西里 更新时间:2023-11-01 01:38:04 26 4
gpt4 key购买 nike

这里有很多这样的例子,但似乎找不到任何用于 react 的例子。我已经设法将 vanilla js 转换为 react 但得到 an error .

答案看起来很简单,所以我在这里使用react:

getInitialState: function(){
return{file: []}
},

_onChange: function(){
// Assuming only image
var file = this.refs.file.files[0];
var reader = new FileReader();
var url = reader.readAsDataURL(file);
console.log(url) // Would see a path?
// TODO: concat files for setState
},

render: function(){
return(
<div>
<form>
<input
ref="file"
type="file"
name="user[image]"
multiple="true"
onChange={this._onChange}/>
</form>
{/* Only show first image, for now. */}
<img src={this.state.file[0} />
</div>
)
};

基本上我看到的所有答案都显示出我所拥有的东西。 React 应用程序有什么不同吗?

关于回答:

enter image description here

最佳答案

Cels' answer 上扩展, 并通过 createObjectURL as @El Anonimo warns about 避免内存泄漏,我们可以使用 useEffect 创建预览并在组件卸载后清理

useEffect(() => {
// create the preview
const objectUrl = URL.createObjectURL(selectedFile)
setPreview(objectUrl)

// free memory when ever this component is unmounted
return () => URL.revokeObjectURL(objectUrl)
}, [selectedFile])

完整的代码大概是这样的

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 (
<div>
<input type='file' onChange={onSelectFile} />
{selectedFile && <img src={preview} /> }
</div>
)
}

关于javascript - 在 React 中上传之前获取图像预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38049966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com