完整的错误消息与此有关:
这是我使用axios编写的代码,用于消耗ny times API。
export default function App() {
const [info, setInfo] = useState([]);
// Load dos dados da api
useEffect(() => {
async function loadNews() {
const response = await api.get('/arts.json');
const { results } = response.data;
console.log(results);
setInfo(results);
}
loadNews();
}, []);
return (
<>
<Main>
<Title>Technology</Title>
<Content>
{info.map(news => <Text key={news.url}>{news.title}</Text> )}
</Content>
<Title>Science</Title>
</Main>
</>
);
}
是加载这些json对象的更好方法。包括分页?为什么给我这个错误?我应该在useEffect挂钩之外使用异步函数,但我不知道如何
答案 0 :(得分:1)
@Ajeet链接中提到的不错的小技巧:
export default function App() {
let isMount = false;
const [info, setInfo] = useState([]);
// Load dos dados da api
useEffect(() => {
isMount = true;
async function loadNews() {
const response = await api.get('/arts.json');
const { results } = response.data;
console.log(results);
setInfo(results);
}
if (isMount) loadNews();
return ()=>{isMount = false};
}, []);
return (
<>
<Main>
<Title>Technology</Title>
<Content>
{info.map(news => <Text key={news.url}>{news.title}</Text> )}
</Content>
<Title>Science</Title>
</Main>
</>
);
}
查看代码,如果在loadNews()之后执行console.log;您可能会看到多个渲染。在此处安装isMount可以防止多次设置信息。
答案 1 :(得分:1)
您还可以在异步功能上使用try and catch块
useEffect(() => {
const loadNews = async () => {
try {
const response = await axios.get('arts.json');
const { results } = response.data;
console.log(results);
setInfo(results);
} catch (err) {
// Handle Error Here
console.error(err);
}
};
loadNews();
}, []);