gpt4 book ai didi

reactjs - 如何设置 react typescript useState 获取类型和使用 map 方法

转载 作者:行者123 更新时间:2023-12-02 00:04:10 24 4
gpt4 key购买 nike

目前我正在练习 react-ts 通过 async fetcher 获取 json 数据

示例代码如下

//Test.tsx
import React, { useState, useEffect } from 'react';
import fetcher from 'api/fetcher';

interface Todo {
userId: number;
id: number;
title: string;
completed: boolean;
}

const Test: React.FC = () => {
const [data, setData] = useState<Todo[]| Promise<Todo[]>>([{
userId: 1,
id: 1234,
title: "test",
completed: false
}]);

useEffect(() => {
const result = fetcher("https://jsonplaceholder.typicode.com/todos");
setData(result);
console.log(result);
}, [])
return (
<div>
//error in here
**{data && data.map()}**
{/* {data && data.map((item: Todo)=> {
<div>{item.id}<div>
})} */}
</div>
);
}
export default Test;
//fetcher.ts
async function fetcher(url: RequestInfo) {
try {
const res = await fetch(url);
const json = await res.json();
console.log("json: ", json);
return json;
} catch (e) {
throw e;
}
}

export default fetcher;

错误信息:类型“Todo [] | 上不存在属性“ map ”| promise '。 “Promise”类型不存在属性“map”

我知道 map 方法不能在 Promise 对象上使用。由于异步调用,初始数据类型设置为 Promise 类型,并在 fetch 解析时切换为 Todo[]。

动态使用map方法如何解决这个问题

最佳答案

您不应该将 promise 设置为 state,而是设置 promise 解决后获得的结果。要等待 promise 解决,您可以使用 async-awaitconventional .then 方法。同时从 useState 值中删除 Promise 作为一种类型

const Test: React.FC = () => {
const [data, setData] = useState<Todo[]>([{
userId: 1,
id: 1234,
title: "test",
completed: false
}]);

useEffect(() => {
fetcher("https://jsonplaceholder.typicode.com/todos").then((result) => {
setData(result);
});
}, [])
return (
<div>
{data && data.map((item: Todo)=> {
<div>{item.id}<div>
})}
</div>
);
}
export default Test;

关于reactjs - 如何设置 react typescript useState 获取类型和使用 map 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61158600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com