【问题标题】:React Typescript Type '[number, Dispatch<SetStateAction<number>>]' is not an array typeReact Typescript Type '[number, Dispatch<SetStateAction<number>>]' 不是数组类型
【发布时间】:2021-09-21 14:47:32
【问题描述】:

我在 react Typescript 中遇到了 setState 的问题,由于某种原因,当我设置状态时 VS 代码会突出显示 Type 的行

Type '[number, Dispatch]' 不是数组类型

和 类型 '[ILogin, Dispatch]' 不是数组类型。

第一个错误是由于我测试 ILogin 接口是否有问题,但 VS 代码突出显示了具有相同类型错误的两行。

这似乎是一个 linting 错误,因为代码编译并运行没有任何问题。有没有人知道可能导致这种情况的原因。

我看这个越多,它似乎是一个 VS 代码问题。每次 npm 启动后, tsconfig.json 都会更改,因此 "jsx": "react" 行更改为 "jsx": "react-jsx" 但如果该行是 react-jsx 则 VS 代码会将所有导入突出显示为错误。当我过去在谷歌上搜索过这个时,人们给出的答案是将它从 react-jsx 更改为 react。这让我觉得下面的问题在某种程度上是相关的,因为这些错误突出显示不会阻止代码编译或运行。但是我对 Typescript 的知识和经验相当有限,所以我不知道从哪里开始寻找问题。

import React, {useState} from 'react';
import { ILogin } from '../Interfaces/ILogin';
import { doLogin, fetch } from '../Services/Api';


const Login: React.FC = () => {

const [login, setLogin] = useState<ILogin>({
    username: "",
    password: "",
}) 

const [test, setTest] = useState(1);

setTest(2);

const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>        {
    setLogin({
        ... login,
        [e.target.name]: e.target.value
    })
}

const handleClick = () => {
    // Console out the login object for testing
    console.log("Data")
    console.log(login)
    doLogin(login.username,login.password)
    .then(() => { 
        /* Logged in, token saved to cookie */ 
        console.log("something1")
    })
    .catch(error => { 
        /* Error when logging in, probably wrong credentials */ 
        console.log("something2")
    })
}

const testApi = () => {
    fetch('account/test')
    .then(({ response, body }) => { 
        /* Got the data! If token expired, it was renewed and saved. */ 
        console.log(body);
        console.log(response);
    })
    .catch(error => {
         /* Error getting data, probably not logged in */ 
    })
}


return (
    <div>
        <label>Username</label><br/>
        <input type="text" name="username" placeholder="Username" onChange={handleChange}/>
        <br/>
        <label>Password</label><br/>
        <input type="password" name="password" placeholder="Password" onChange={handleChange}/>
        <br/>
        <br/>
        <input type="button" value="Login" onClick={handleClick}/>
        <br/>
        <input type="button" value="API Test" onClick={testApi} />
    </div> 
)
}

export default Login;

ILogin.tsx

export interface ILogin {
    username: string;
    password: string;
}

问题已更新以显示 ILogin 界面,我认为这不是问题,因为任何 setState 都会出现相同的问题,即使是数字等基本类型。

【问题讨论】:

  • 你能告诉我们你的 ILogin 界面吗?
  • 使用 ILogin 界面更新了问题,我看不到问题在于,即使使用像数字这样的基本类型也会出现相同的错误,但正如他们所说,海上发生了奇怪的事情.

标签: reactjs typescript use-state


【解决方案1】:

据我所知,这似乎是一个 VS Code 问题,我已经开始在这个项目中使用 Atom 而不是 VS Code,我没有遇到任何这些问题。

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2022-10-22
    • 1970-01-01
    • 2021-07-30
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多