в настоящее время я практикую реакцию-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 Object. из-за асинхронного вызова начальный тип данных устанавливается как Promise type и переключается на Todo [], когда выборка разрешена.
как решить эту проблему, чтобы динамически использовать метод карты
await
позвонитьfetcher
, чтобы получить список дел вне обещания. Попробуйте использовать метод, предложенный в этом ответе в вашемuseEffect
. - person Cameron Little   schedule 11.04.2020useState<Todo[]>
исправит эту конкретную ошибку. - person bastianwegge   schedule 11.10.2020