我目前有这个功能:
const fetchJobs = async (userId: string) => {
setJobs([])
await axios.post("/api/fetch/fetchMany?type=jobs", {
user_id: userId
})
.then((response) => {
if (response == null || response.data.length === 0) {
setJobs([])
} else {
const sortedJobs = response.data.sort = (a: Date, b: Date): Job[] => {
return new Date(a.startDate) - new Date(b.startDate)
}
setJobs(sortedJobs)
}
})
}
它所做的是获取一个“作业”对象列表,然后尝试将它们从最新到最旧排序,然后将它们放入作业状态中。
但是,有两个问题:
1.排序函数中的类型“Date "上不存在”startDate“
1.无法将函数赋给类型为“SetStateAction〈Job[]〉”的参数
对于某些上下文,下面是我的Job类型,它是一个对象数组:
export type Job = {
_id: string,
user_id: string,
jobTitle: string,
employer: string,
responsibilities: string[],
startDate: string | Date,
endDate: string
}
下面是我的状态类型:
const [jobs, setJobs] = useState<Job[]>([])
我想我需要改变我的状态可以被设置为什么,但是我不明白为什么我不能使用函数来设置状态,因为它返回一个作业类型数组。
任何帮助都将不胜感激
3条答案
按热度按时间4bbkushb1#
键入axios请求
await axios.post<Job[]>(...)
,以便相应地自动键入response.data
。Array#sort()是一个方法,而不是属性。它需要一个回调函数,该回调函数从数组中接收两个值(在您的示例中,这两个值的类型是
Job
,而不是Date
),并根据它们的顺序返回一个有符号的数字。不是布尔值。response.data.sort((a, b) => new Date(a.startDate) - new Date(b.startDate))
不要将
async/await
与.then()
混用所以总的来说
krcsximq2#
在处理
network tasks
时使用async/await
或Promise
fkaflof63#
对于首次发布:
排序函数中的类型"Date"上不存在"startDate"
您可以更改排序参数的类型
到
请告诉我它是否修复了第二个问题,因为我找不到以下问题:
无法将函数赋给类型为"SetStateAction〈Job []〉"的参数
但是该改变可以修复两者。