我正在尝试使用react hooks上传图片
const [picture, setPicture] = useState();
const onChangePicture = e => {
console.log('picture: ', picture);
setPicture(...picture, e.target.files[0]);
};
<input
type="file"
//style={{ display: 'none' }}
onChange={e => onChangePicture(e)}
/>
但是我遇到以下错误:
Uncaught TypeError: picture is not iterable
当我将onChangePicture更改为
setPicture(picture, e.target.files[0])
图片变量未定义
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以将值直接传递给setPicture函数以设置状态变量图片。
尝试:
const [picture, setPicture] = useState(null);
const onChangePicture = e => {
console.log('picture: ', picture);
setPicture(e.target.files[0]);
};
<input
type="file"
//style={{ display: 'none' }}
onChange={onChangePicture}
/>
答案 1 :(得分:0)
我认为您打算这样做:
setPicture([...picture, e.target.files[0]]);
这会将第一个文件连接到所有当前文件。
请记住使用const [picture, setPicture] = useState([]);
,以确保它不会第一次中断
答案 2 :(得分:0)
我终于解决了这个问题:
问题在这里
const [picture, setPicture] = useState(null); //Incorrect
您可以使用此
const [picture, setPicture] = React.useState(""); //Correct
这可以解决此问题
答案 3 :(得分:0)
onChange = {(e) => this.onChangePicture(e)} 只能在您将状态设为 状态 = { 图像, 名称..... }
但是当使用 useState()
你需要使用
const [image, setImage] = useState("");
onChange = {(e) => setImage(e.target.files[0])}
我希望这能解决错误。 一切顺利!
答案 4 :(得分:0)
对于任何来到这里寻找如何使用 TypeScript 进行操作的人:
const [file, setFile] = useState<File>();
const onChange = (event: React.FormEvent) => {
const files = (e.target as HTMLInputElement).files
if (files && files.length > 0) {
setFile(files[0])
}
}