react-api呼び出しがまだ空の場合、マッピングは動作しません.
8885 ワード
次のコードの最も重要な部分はapiをロードして文章を設定していないときです!すなわちarticles状態がnullの場合.このため、articlesがfalseの状態をif文で処理する必要があります.
私の知る限りでは、ユーザEffectに空の配列に依存すると、コンポーネントのロードに伴って初めて実行され、apiがロードされ、articlesが設定されレンダリングされると誤って認識されます.しかし、今回の経験から、実際のレンダリングは先に行われ、userEffectに空のレイアウトを与えるhookであることがわかります.
まずコンポーネントレンダリング、次にuserEffectです.受信状態でmapを返す場合、nullのままではmapが戻らないためエラーが発生します.したがって、ユーザEffectがapiを呼び出している場合、if(!articles)return nullが必要です.
私の知る限りでは、ユーザEffectに空の配列に依存すると、コンポーネントのロードに伴って初めて実行され、apiがロードされ、articlesが設定されレンダリングされると誤って認識されます.しかし、今回の経験から、実際のレンダリングは先に行われ、userEffectに空のレイアウトを与えるhookであることがわかります.
import React, { useState, useEffect } from 'react';
import styled from 'styled-components';
import axios from 'axios';
import NewsItem from './NewsItem';
const NewsListBlock = styled.div`
width: 768px;
margin: 0 auto;
margin-top: 2rem;
`;
export default function NewsList() {
const [articles, setArticles] = useState(null);
const [loading, setLoading] = useState(false);
useEffect(() => {
const fetchData = async () => {
setLoading(true);
try {
const response = await axios.get(
'https://newsapi.org/v2/top-headlines?country=kr&apiKey=29a0160871334cf6861f6fb96d4f86c4'
);
console.log(response.data.articles);
setArticles(response.data.articles);
} catch (e) {
console.log(e);
}
setLoading(false);
};
fetchData();
}, []);
if (loading) {
return <p>로딩중</p>;
}
if (!articles) {
return null;
}
return (
<NewsListBlock>
{articles.map(article => (
<NewsItem key={article.url} article={article} />
))}
</NewsListBlock>
);
}
シングルラインサマリーまずコンポーネントレンダリング、次にuserEffectです.受信状態でmapを返す場合、nullのままではmapが戻らないためエラーが発生します.したがって、ユーザEffectがapiを呼び出している場合、if(!articles)return nullが必要です.
Reference
この問題について(react-api呼び出しがまだ空の場合、マッピングは動作しません.), 我々は、より多くの情報をここで見つけました https://velog.io/@joker77z/react-api-호출-시-아직-null이면-map이-작동하지-않는-현상テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol