const [files, setFiles] = useState([])
const handleChange = (event: any) => {
setFiles.push(event.target.files[0].name)
return (<div>
{files.map((file: any) => (
<p>Hello!</p>
))}
</div>)
}
单击按钮时,我试图将一个值推入我的状态,然后在我的状态中映射以呈现p个元素,但是我遇到错误“类型为'any'的参数不能分配给类型的参数尝试推送到setFiles时显示'never'.ts(2345)“。
答案 0 :(得分:0)
您还需要使用any
转换到文件状态:
const [files, setFiles] = useState([] as any)
此外,这一行代码是错误的:
setFiles.push(event.target.files[0].name)
setFiles
是您所知道的功能。
您应该使用:
setFiles(files.push(event.target.files[0].name))
但是反应状态是不可变的。因此,您可以使用传播运算符,例如:
setFiles([...files, event.target.files[0].name])
答案 1 :(得分:0)
由于反应状态是不变的,因此.push()函数将不起作用,因此可以使用.concat()或散布运算符。
为了避免不必要的副作用,您必须将组合数组逻辑与回调一起包装。
setFiles(oldArray => [...oldArray, event.target.files[0].name])
或
setFiles(oldArray => oldArray.concat(event.target.files[0].name))