【问题标题】:Argument of type 'any' is not assignable to parameter of type 'never'.ts(2345)“any”类型的参数不可分配给“never”类型的参数。ts(2345)
【发布时间】:2020-06-10 22:15:03
【问题描述】:
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’的参数不可分配给类型参数'never'.ts(2345)" 当我尝试推入 setFiles 时。

【问题讨论】:

    标签: reactjs typescript


    【解决方案1】:

    您还需要使用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])
    

    【讨论】:

    • 这仍然给我说我无法推送到数组的错误
    【解决方案2】:

    由于反应状态是不可变的,因此 .push() 函数将不起作用,您可以使用 .concat() 或扩展运算符。

    为了避免不必要的副作用,您必须使用回调包装组合数组逻辑。

    setFiles(oldArray => [...oldArray, event.target.files[0].name])
    

    setFiles(oldArray => oldArray.concat(event.target.files[0].name))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2021-10-23
      • 2022-06-16
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多