Syl*_*lar 14 javascript jquery reactjs
这里有很多这样的例子,但似乎无法找到任何反应.我设法转换香草js作出反应,但得到一个错误.
答案看起来很简单所以我在这里做出反应:
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>
)
};
Run Code Online (Sandbox Code Playgroud)
基本上我见过的所有答案都显示了我所拥有的东西.React应用程序有何不同?
关于答案:
jay*_*jay 41
扩展Cels 的回答,并避免内存泄漏,createObjectURL
正如@El Anonimo 警告的那样,我们可以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])
Run Code Online (Sandbox Code Playgroud)
完整的代码看起来像这样
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>
)
}
Run Code Online (Sandbox Code Playgroud)
Piy*_*oor 25
没有区别,只需在load
活动结束时阅读您的图片.在load end
事件处理程序中只说出你的状态:
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);
reader.onloadend = function (e) {
this.setState({
imgSrc: [reader.result];
})
}.bind(this);
console.log(url) // Would see a path?
// TODO: concat files
},
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.imgSrc} />
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这是一个很好的例子: https ://www.kindacode.com/article/react-show-image-preview-before-uploading/
const App = () => {
const [selectedImage, setSelectedImage] = useState();
const imageChange = (e) => {
if (e.target.files && e.target.files.length > 0) {
setSelectedImage(e.target.files[0]);
}
};
const removeSelectedImage = () => {
setSelectedImage();
};
return (
<>
<div>
<input
accept="image/*"
type="file"
onChange={imageChange}
/>
{selectedImage && (
<div>
<img
src={URL.createObjectURL(selectedImage)}
alt="Thumb"
/>
<button onClick={removeSelectedImage}>
Remove This Image
</button>
</div>
)}
</div>
</>
);
};
Run Code Online (Sandbox Code Playgroud)
这是一个简单有效的解决方案,可显示所有选定的图像
getInitialState: function(){
return{file: []}
}
_onChange: (event)=>{
this.setState({
imgs: event.target.files
})
},
render: function(){
return(
<div>
<form>
<input
ref="file"
type="file"
name="user[image]"
multiple="true"
onChange={this._onChange}/>
</form>
{/* Display all selected images. */}
{this.state.imgs && [...this.state.imgs].map((file)=>(
<img src={URL.createObjectURL(file)} />
))}
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
请这对我来说非常有效
state = {
img: logo
}
handleChangeImage = e => {
this.setState({[e.target.name]: URL.createObjectURL(e.target.files[0])})
}
<input type="file" id="img" name="img" accept="image/*" className="w-100" onChange={this.handleChangeImage}/>
<img src={this.state.img} alt="img"/>
Run Code Online (Sandbox Code Playgroud)
查看链接了解更多详情https://medium.com/@650egor/react-30-day-challenge-day-2-image-upload-preview-2d534f8eaaa
归档时间: |
|
查看次数: |
18973 次 |
最近记录: |