개발자
프론트를 배우고 있는 학생입니다. 서버에서 response.data를 setData함수로 data를 업데이트해서 콘솔에 출력했을 때는 분명 각 속성들이 잘 정의되어서 왔습니다. data의 속성에 있는 배열을 맵핑하려고 했더니 안되서 콘솔에 출력을 해보니 해당 속성은 undefined라고 뜹니다. 다른 속성들도 undefined라고 뜨고 다른 state를 만들어서 data의 각 속성을 개별적으로 받을려고 했는데 저렇게 해도 undefined로 떠요. 혹시 해당 데이터 객체는 잘 왔는데 각 속성에 접근하면 undefined인 이유를 아시나요?? 🥲
1const response = await axiosInstance.get( `endpoint`,);
2 setData(response.data);
3 response.data && setPost(response.data.boards);
답변 2
1. 제대로 값을 안넣어줬을경우 2. const [loading, setLoading] = useState(true); const response = await axiosInstance.get( `endpoint`,); setData(response.data); setLoading(false); { loading ? ( <> 로딩</>) : (<> 데이터값 매핑 </>) } 이런식으로 진행해야 합니다.
익명
작성자
2024년 03월 19일
첫번째에 제대로 값을 안넣어준 경우는 무슨 의미일까요? loading을 이용해봐도 안되네요.. 애초에 처음에는 디폴트 값이 들어가도 서버에서 데이터를 받아와 상태가 업데이트 되면 컴포넌트가 리랜더링이 되어야 하는데 속성에 접근시에 undefined로 뜨는 게 이해가 안가요..
김진혁
개발 • 2024년 03월 19일
userffect를 써서 data가 변경되었을때 출력해보세요
익명
작성자
2024년 03월 19일
useEffect 안에서 response.data를 찍으면 객체가 콘솔에 찍히는데 response.data.속성을 찍으면 undefined에요...ㅠㅠ
react에서는 fetch -> setData 과정을 console.log로 보게 되면 제대로 파악하기가 어려울 수 있습니다. 이유는 아실것 같지만 react는 비동기적 처리를 중심으로 되어 있기 때문입니다. 편하게 console.log 를 찍지 않아야된다 생각하시고 async await을 잘 사용하여 구현하시면 되겠습니다. 또한, 소스를 보니 response.data가 주요 객체 같은데 구조분해 할당도 이용해 보시죠. 예시) const { data } = await axiosInstance.get('endPoint')?.response
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 03월 19일
이 문제는 비동기 처리와 관련된 이슈일 가능성이 많습니다. 서버로부터 데이터를 받아오는 것은 비동기적으로 동작하기 때문에, JavaScript는 response.data를 처리하면서 다음 코드로 넘어가게 됩니다. 만약 데이터를 받아오는데 시간이 걸린다면, `setPost(response.data.boards)` 가 실행되는 시점에서 `response.data`가 아직 정의되지 않았을 수 있습니다. 따라서 본문의 코드처럼 set 함수를 실행하는 위치에 따라 state가 업데이트 되지 않거나, 예상치 못한 에러가 발생할 수 있습니다. 'undefined'로 출력되는 이유도 이와 같습니다. 비동기 액션을 다룰 때 가장 간단한 해결 방법은 useEffect 훅을 사용하는 것입니다. ```javascript useEffect(() => { const fetchData = async () => { const response = await axiosInstance.get(`endpoint`); setData(response.data); setPost(response.data.boards); }; fetchData(); }, []); ``` useEffect 내부에서 비동기 함수를 호출하면 React는 기다리지 않고 render 함수를 계속해서 실행합니다. 그 후 비동기 작업이 완료되면 상태를 업데이트하고 컴포넌트를 리렌더링합니다. 여기서 유의해야 할 점은, useEffect의 두 번째 파라미터인 의존성 배열입니다. 이 배열에 값이 없으면 컴포넌트가 렌더링 될 때마다 Effect가 실행되지만, 비어있는 배열을 전달하면 컴포넌트가 마운트 될 때 한 번만 실행됩니다. 필요에 따라 상태나 프로퍼티를 의존성 배열에 추가하여 함수가 언제 실행될지 조절할 수 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!