我是React的初学者,只知道如何在React中使用函数,但是周围的许多代码都在使用类。如何将其转换为函数?
也有人可以解释为什么使用类吗?我讨厌语法。
import React from 'react';
class ImageUpload extends React.Component {
constructor(props) {
super(props);
this.state = {file: '',imagePreviewUrl: ''};
}
_handleSubmit(e) {
e.preventDefault();
// TODO: do something with -> this.state.file
console.log('handle uploading-', this.state.file);
}
_handleImageChange(e) {
e.preventDefault();
let reader = new FileReader();
let file = e.target.files[0];
reader.onloadend = () => {
this.setState({
file: file,
imagePreviewUrl: reader.result
});
}
reader.readAsDataURL(file)
}
render() {
let {imagePreviewUrl} = this.state;
let $imagePreview = null;
if (imagePreviewUrl) {
$imagePreview = (<img src={imagePreviewUrl} alt="Artwork"/>);
} else {
$imagePreview = (<div className="previewText">Please select an Image for Preview</div>);
}
return (
<div className="previewComponent">
<form onSubmit={(e)=>this._handleSubmit(e)}>
<input className="fileInput"
type="file"
onChange={(e)=>this._handleImageChange(e)} />
<button className="submitButton"
type="submit"
onClick={(e)=>this._handleSubmit(e)}>Upload Image</button>
</form>
<div className="imgPreview">
{$imagePreview}
</div>
</div>
)
}
}
export default ImageUpload;
答案 0 :(得分:1)
您的代码已经被编写为基于Class
的组件。这是将您基于类的组件作为具有hooks
的功能组件的实现。
import React, { useState } from "react";
function ImageUpload() {
const [file, setFile] = useState("");
const [imagePreviewUrl, setimagePreviewUrl] = useState("");
const handleSubmit = (e) => {
e.preventDefault();
// TODO: do something with -> this.state.file
console.log("handle uploading-", file);
};
const handleImageChange = (e) => {
e.preventDefault();
let reader = new FileReader();
let file = e.target.files[0];
reader.onloadend = () => {
setFile(file);
setimagePreviewUrl(reader.result);
};
reader.readAsDataURL(file);
};
let $imagePreview = null;
if (imagePreviewUrl) {
$imagePreview = <img src={imagePreviewUrl} alt="Artwork" />;
} else {
$imagePreview = (
<div className="previewText">Please select an Image for Preview</div>
);
}
return (
<div className="previewComponent">
<form onSubmit={(e) => handleSubmit(e)}>
<input
className="fileInput"
type="file"
onChange={(e) => handleImageChange(e)}
/>
<button
className="submitButton"
type="submit"
onClick={(e) => handleSubmit(e)}
>
Upload Image
</button>
</form>
<div className="imgPreview">{$imagePreview}</div>
</div>
);
}
export default ImageUpload;