개발자

Nextjs async 서버컴포넌트 질문있습니다.

2023년 07월 20일조회 413

// page.tsx import WeatherList from "@/components/containers/main/WeatherList"; export default function Home({ searchParams, }: { searchParams: { country: string }; }) { const country = searchParams.country ? searchParams.country : "kr"; return ( <> <WeatherList country={country} /> </> ); } // server component export default async function WeatherList({ country }: { country: string }) { const res = await fetch( `http://localhost:3000/api/cityList?country=${country}` ); const cityList = await res.json(); return ( ... ); } 'WeatherList' cannot be used as a JSX component. page.tsx 에서 WeatherList 컴포넌트부분에 위와같은 에러가 뜹니다.. @types/react 를 18.2.8 버전으로 바꿔줘도 해결이안되는데 저와 같은분 계실까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

권혁진님의 프로필 사진

return 구문 안에 컴포넌트를 포함시키게 되면 포함된 컴포넌트 에서 리턴해주는 jsx 를 출력하게 됩니다 작성하신 코드는 api 호출을 하는 코드이므로 return 구문안에 컴포넌트 형태로 import 하는게 아닌 return 구문 위에서 함수 호출 방식으로 호출을 하셔야 할듯 합니다

아발란체님의 프로필 사진

아발란체

작성자

프론트엔드 개발자2023년 07월 24일

Weatherlist 컴포넌트는 서버컴포넌트로 작성하였습니다! 리턴문안에 jsx코드들이 존재하구영 넥스트 공식문서에서는 @types/react를 18.2.8버전으로 설치하면 에러가 사라진다고 되어있는데 저는 안되서요

김병훈님의 프로필 사진

비슷한 케이스가 있을까싶어 검색을 해봤는데요. 타입스크립트가 Promise<JSX.Element>를 이해하지 못해서, 발생하는 문제라는 얘기가 있더라고요. 에러가 발생은 하지만, 실행에 문제가 없다면 타입스크립트 버전을 한번 확인해보시면 좋을 것 같습니다. https://github.com/vercel/next.js/issues/42292 공식문서도 살펴보니, typescript 5.1.3 / @types/react 18.2.8 이상으로 권장하고 있네요. https://nextjs.org/docs/app/building-your-application/configuring/typescript#async-server-component-typescript-error

아발란체님의 프로필 사진

아발란체

작성자

프론트엔드 개발자2023년 07월 27일

vs코드 타입스크립트플러그인버전이 4버전대였네요 ㅠ 5.1.6 최신버전으로 맞춰주니 해결됐습니다 감사합니다

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!