![](/img/trans.png)
[英]Typescript Argument of type never[] is not assignable to parameter of type SetStateAction<never[]>
[英]Argument of type is not assignable to parameter of type 'SetStateAction<never[]>'. in React
我是 React 鈎子的新手並試圖學習它。 我有一個簡單的 get api,它在 heroku 服務器中提供。 我有以下兩個組件 ContactCards 和 ContactCard,其中我在 ContactCards 中提供了 api。
在這里,我將縮略圖和標題作為靜態數據,而 data1 和 data2 是來自 api 的數據。
我的名片
import React, { Component } from "react";
interface IContactCardProps {
thumbnail?: string;
title?: string;
data1?: string;
data2?: string;
}
interface IContactCardState {}
class ContactCard extends Component<IContactCardProps, IContactCardState> {
render() {
return (
<div className="contact-card">
<div className="container">
<div className="thumbnail">
<img src={this.props.thumbnail} alt={this.props.title} />
</div>
<div className="title">{this.props.title}</div>
<div className="data">{this.props.data1}</div>
<div className="data">{this.props.data2}</div>
</div>
</div>
);
}
}
export default ContactCard;
我的名片
import ContactCard from "./ContactCard";
import axios from "axios";
function ContactCards() {
const[contacts, setContacts] = useState([])
useEffect(() => {
axios.get('https://texas-crm1.herokuapp.com/api/contactinfo')
.then (res =>{
console.log(res.data[0])
let data = res.data[0];
setContacts ({
contacts: [
{
thumbnail: clock,
title: "Opening Times",
data1: data.open_hour,
data2: data.close_hour,
},
{
thumbnail: telephone,
title: "Phone",
data1: data.phone_1,
data2: data.phone_2,
},
{
thumbnail: location,
title: "Location",
data1: data.street_name,
data2: data.city + ", " + data.state + ", " + data.country,
},
],
});
})
.catch(err =>{
console.log(err)
})
})
return (
<div>
</div>
)
}
在這里,我從 setContacts 中的聯系人到一直到 catch 函數之前的右括號都得到了紅色下划線。
錯誤說明如下:
'{ 聯系人:{ 縮略圖:字符串; 標題:字符串; 數據1:任何; 數據2:任何; }[]; }' 不能分配給類型為 'SetStateAction<never[]>' 的參數。
{ contacts: []}
是一個對象,您的初始狀態是使用[]
,這是一個數組。 IOW:您嘗試將 setState 用於當前是數組的內容,將其轉換為包含名為 contacts 的數組的對象。
我要做的是根據您的IContactCardProps
為您的 useState 創建一個接口
類似的東西->
const[contacts, setContacts] =
useState<{contacts:IContactCardProps[]}>
({contacts: []});
您的默認 setState 現在是一個具有正確形狀的對象setContacts
。 這里的優點也是你的setContacts
現在被類型檢查,例如。 你不可能不小心把t1tle: "Phone",
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.