ㅇㅇㅈ Blog

프론트엔드 수행중

0%

error)fetch data error

data 받아와서 맵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export default function DailyList() {
const [data, setData] = useState(null);

useEffect(() => {
const fetchData = async () => {
const res = await axios.get(
'https://s3.us-west-2.amazonaws.com/secure.notion-static.com/4b41cea6-0a74-4f33-86b8-718f24260cc3/data.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220517%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220517T145911Z&X-Amz-Expires=86400&X-Amz-Signature=5156d7c9add92e724823ada0a623f7f270b0b051ae0700d5c3eda2da5775bbee&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22data.json%22&x-id=GetObject'
);
const dataArr = res.data;
setData(dataArr);
console.log(dataArr);
};
fetchData();
}, []);

return <div>{data.map((e) => e.date)}</div>;
}

ToyProject를 리액트로 만들어보기 위해서 데이터를 먼저 받아와봤다
콘솔로도 받아와지는게 잘 찍히는데 출력해보기 위해서 map을 써봤더니 두둥.. 오류?

검색 해보니

  1. 컴포넌트의 상태값 (data) 의 시작값은 null이다
  2. 비동기적으로 데이터를 처리할 때, 컴포넌트는 적어도 한 번, 데이터가 불러지기 전에 렌더링 된다
    이기 때문이다..

해결법은 논리연산자 && 을 사용해 조건이 참이면 렌더링 되게 해주면 된다고 한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export default function DailyList() {
const [data, setData] = useState(null);

useEffect(() => {
const fetchData = async () => {
const res = await axios.get(
'https://s3.us-west-2.amazonaws.com/secure.notion-static.com/4b41cea6-0a74-4f33-86b8-718f24260cc3/data.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45EIPT3X45%2F20220517%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20220517T145911Z&X-Amz-Expires=86400&X-Amz-Signature=5156d7c9add92e724823ada0a623f7f270b0b051ae0700d5c3eda2da5775bbee&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22data.json%22&x-id=GetObject'
);
const dataArr = res.data;
setData(dataArr);
console.log(dataArr);
};
fetchData();
}, []);

return <div>{data && data.map((e) => e.date)}</div>;
}

잘 출력 된다..