我有两种使用setstate
设置对象数组的情况。 看起来是这样的:
const [friendList, setFriendList] = useState<any>();
const _onCompleted = (data: any) => {
let DATA = data.me.friends.map(
(item: {
firstName: string;
id: number;
rating: number;
vehicles: Array<Vehicle>;
friends: Array<User>;
}) => ({
id: item.id,
imageUrl: defaultUrl,
name: item.firstName,
rating: item.rating,
vehicles: [],
numberOfFriends: item.friends.length,
}),
);
setFriendList(DATA);
};
如果在onComplete上,数据如下所示:
DATA
Array (3)
0 {id: 1, imageUrl: "https://", name: "Bob", rating: 1, vehicles: [], …}
1 {id: 3, imageUrl: "https://", name: "Rhena", rating: 3, vehicles: [], …}
2 {id: 4, imageUrl: "https://", name: "Jack", rating: 4, vehicles: [], …}
目前,我使用的是
,这是可行的。 但是,我不想使用任何
。 我尝试创建自定义类型:
type Friend = {
id: number,
imageUrl: string,
name: string,
rating?: number,
//vehicles: item.vehicles,
vehicles?: any,
numberOfFriends?: number,
};
type FriendList = {
friendList: Array<Friend>;
};
但是,当我像这样使用它时,usestate
,我在setfriendlist(DATA);
上从onerror
得到一个错误,即类型为“{id:string;imageurl:string;name:string;}[]”的参数不能分配给类型为“setstateaction
为什么会这样呢? 我的朋友
类型中的其余字段是选项,那么为什么会出现此错误呢?
我还尝试使用useState
和useState([])
,但我得到了相同的错误。
这应该适用于设置类型-
const [friendList, setFriendList] = useState<Array<Friend>>([]);
此外,在类型-中有多个选项的情况下,可以强制转换类型-
setFriendList(DATA as Array<Friend>);
您的FriendList
似乎是FriendList
类型,它是{friendList:Array},与Data
不同的是Array。 有两种方法可以修复它。
friendList
更改为Array:const[friendList,setFriendList]=useState>()
,并确保您设置了let data:array
SetFriendList({FriendList:DATA})
更新:首选使用朋友[
]而不是数组
:
const [friendList, setFriendList] = useState<Friend[]>();
const _onCompleted = (data: any) => {
let DATA: Friend[] = data.me.friends.map(
(item: {
firstName: string;
id: number;
rating: number;
vehicles: Array<Vehicle>;
friends: Array<User>;
}) => ({
id: item.id,
imageUrl: defaultUrl,
name: item.firstName,
rating: item.rating,
vehicles: [],
numberOfFriends: item.friends.length,
}),
);
setFriendList(DATA);
};