如何设置 react typescript useState 获取类型和使用 map 方法
how to set react typescript useState fetch type and using map method
目前我正在练习 react-ts 通过异步获取器获取 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;
错误信息:
属性 'map' 在类型 'Todo[] | Promise' 上不存在。
属性 'map' 在类型 'Promise'
上不存在
我知道 map 方法不能在 Promise 对象上使用。由于异步调用,初始数据类型设置为 Promise 类型,并在 fetch resolved 时切换为 Todo[]。
动态使用map方法如何解决这个问题
您不应该将 promise 设置为 state,而是设置 promise 被解决后获得的结果。要等待承诺解决,您可以使用 async-await
或 conventional .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;
目前我正在练习 react-ts 通过异步获取器获取 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;
错误信息: 属性 'map' 在类型 'Todo[] | Promise' 上不存在。 属性 'map' 在类型 'Promise'
上不存在我知道 map 方法不能在 Promise 对象上使用。由于异步调用,初始数据类型设置为 Promise 类型,并在 fetch resolved 时切换为 Todo[]。
动态使用map方法如何解决这个问题
您不应该将 promise 设置为 state,而是设置 promise 被解决后获得的结果。要等待承诺解决,您可以使用 async-await
或 conventional .then
方法。同时从 useState 值
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;