繁体   English   中英

如何用数组和Typescript中的object设置状态?

[英]How to setState with an Array and object in Typescript?

这就是我声明 state 的方式

const [input, setInput] = React.useState('')
const [goals, setGoals] = React.useState<string[]>([])

这是我的错误代码:

const addHandler = () => {
    setGoals((curGoals) => [...curGoals, { key: Math.random().toString(), value:input}])
}

这是一个 typescript 提示:

“(curGoals: string[]) => (string | { key: string; value: string; })[]”类型的参数不可分配给“SetStateAction<string[]>”类型的参数。 类型 '(curGoals: string[]) => (string | { key: string; value: string; })[]' 不可分配给类型 '(prevState: string[]) => string[]'。 类型 '(string | { key: string; value: string; })[]' 不可分配给类型 'string[]'。 输入'字符串| { 键:字符串; 值:字符串; }' 不可分配给类型 'string'。 输入'{键:字符串; 值:字符串; }' 不可分配给类型 'string'.ts(2345)

我仍然不明白为什么我的代码仍然输出这个错误。 我确实在 useState 中使用了字符串类型的数组。

我该如何解决这个错误?

您将 state 声明为string[]这意味着它是一个字符串数组。 所以这个 state 的一项必须是一个string { key: Math.random().toString(), value: input }是一个 object,具有valuekey类型的属性string

您可以将 state 更改为Array<{key: string, value: string}>类型

const [input, setInput] = React.useState('')
const [goals, setGoals] = React.useState<
    Array<{
        key: string,
        value: string
    }>
>([])

const addHandler = () => {
    setGoals((curGoals) => [...curGoals, { key: Math.random().toString(), value: input }])
}

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM