질문1) bgColor에 값을 입력하면 바로 그 색상이 무엇인지 표시 되는데 어떻게 해야 하나요? 질문2) leftIcon에 img src 항목에 영상과 다르게, </img> 로 닫아야 하던데 문법이 바뀐 건가요? react v18(v17에서는 typescript error로 실행을 못했습니다) 기준으로 설치되어 있습니다. *제 수준은 자바스크립트 기본 문법정도 이해하고 있고, 현재 그냥 따라해 보는 수준입니다.
로그아웃&로그인 여부에 따라 화면 다르게 하기 강의까지 듣고 프로젝트에 적용 중입니다. 로그인을 하고 홈페이지로 이동하는데, me data 에 null 값이 들어와서 로그아웃 버튼이 보이지 않습니다. 그런데 새로고침을 하면 다시 원하는 화면이 그려지더라구요. 아래에 비슷한 질문이 있어서 확인해봤는데 해결이 안됐습니다. //LogoutButton.tsx 'use client' import { signOut, useSession } from 'next-auth/react' import { useRouter } from 'next/navigation' export default function LogoutButton() { const router = useRouter() const { data: me } = useSession() const onLogout = () => { signOut({ redirect: false }).then(() => { router.replace('/') }) } // 내 정보 없으면 로그아웃 버튼 안 보여주기 if (!me?.user) { return null } return ( <button onClick={onLogout}> <div> <div>🔙로그아웃🔙</div> <img src={me.user?.image!} alt={me.user?.email as string} /> </div> <div> <div>{me.user?.name}</div> <div>@{me.user?.email}</div> </div> </button> ) }
몇주간 계속 공부하면서 고민을 해봤는데... 결과적으로 서버 컴포넌트에서 데이터를 가져왔을때 좋은 상황이 어떤 경우인지 모르겠습니다. 서버 컴포넌트에서 데이터를 가져왔을때, 그 데이터는 SEO에 반영이 되나요? NEXTJS의 공식문서에서는 서버 컴포넌트가 유리한 상황이 'data fetch' 라고 되어 있습니다. 하지만 지난번에 질문했을때 클라이언트 컴포넌트에서 데이터를 가져오는게 보통 더 좋다는 답변을 받았었습니다. 클라이언트에서 데이터를 가져오는게 좋은 상황과, 서버에서 데이터를 가져오는게 좋은 상황을 구분을 못하겠어서 조언을 구하고자 질문 드립니다.
관련된 질문이 있나 찾아보고 혼자 코드 비교해보며 고군분투했지만 이유를 알 수가 없어 질문을 남깁니다! 질문 (afterLogin) > _component > LogoutButton.tsx 파일에서 useSession() 훅을 통하여 받아오는 data가 없어 if(!me?.user) 문에서 return 처리가 되어 로그아웃 버튼이 렌더링 되지 않습니다 -> 로그인이 제대로 되지 않는 것 같습니다 관련되서 추적을 해보니 터미널 창에 아래와 같은 에러가 뜹니다 네트워크 탭에서 session의 경우 response가 null로 넘어옵니다 application의 cookie또한 담기지 않습니다 아래는 관련된 파일들의 코드입니다.. mocks > handlers.ts auth.ts middleware.ts [...nextauth] > route.ts package.json 혹시나 다른분들도 저 같은 경우가 있으신 분들은 답변 한번 부탁드리겠습니다
영상 중 해당 위치에서 left와 right를 둘이 같이 그대로 다른 곳에 쓰여진 코드를 가져오는 기능이 있는 듯이 보이는데요. 혹시 vscode에서도 해당 기능 사용할 수 있나요? 커서 올려두면 하나씩은 보이는데 저렇게 한번에 붙이는 기능이 있으면 좋겠네요. 강의 내용과 크게 상관없는 내용인데... 편리해보이는데 찾아볼 때 바로 원하는게 안나와서요.
안녕하세요 강의 잘 보고 있습니다 문득 궁금한점이 생겨 여쭤보고 싶은게 있는데요 ! api/auth/[...nextauth]/route.ts 파일 안에 NextAuth가 제공해주는 GET과 POST를 export해놓으면 api/auth/...something 경로로 타고 들어오는 api 요청은 export한 GET과 POST로 사용이 된다라고 말씀해주셨는데 그 GET과 POST는 어디서 호출을 하는걸까요 ? 마찬가지로 middleware.ts 파일에도 NextAuth에서 제공하는 auth를 middleware로 네이밍을 변경하여 사용한다고 하셨는데 그 middleware도 어디서 호출을 해서 사용하고 있는걸까요 ? 내보냈다는건(export) 어디선가 받아와서(import) 해서 사용하는게 아닌가 싶어서 질문 드려봅니다 초보적인 질문이지만 해결하고 가고 싶어서 질문 드려봅니다
Suspense로 Streaming하여 최적화하기(feat. loading.tsx, error.tsx) 강의를 듣던 중 헷갈리는 부분이 있어서 질문 남깁니다. atferLogin > page.tsx 에서 Suspense를 사용해서 TabDeciderSuspense 를 감싸주고 있는데 TabDeciderSuspense 내부 코드를 보면 위와 같이 prefetch를 통해 postsRecommends관련 데이터를 서버에서 그려서 클라이언트로 하이드레이션 해주고 있습니다. 제가 이해한 바로는 이 장점이 사용자가 해당 페이지를 빠르게 볼 수 있다. 그래서 서스팬스를 사용하지 않았을 땐 로딩바가 뜰 새도 없이 페이지가 잘 보여지게 되는데, 지금은 프리패치로 데이터를 먼저 받아오는것과 서스팬스 풀백을 통해 로딩에 관한 부분을 둘 다 사용하고 있는 걸로 보여서 좀 헷갈려서 질문드려요. 서스팬스로 로딩을 보여주고 싶으면 TabDeciderSuspense에서 프리패치를 사용하는 의미가 없는 거 아닌가요?
지금 영상에서 @modal 폴더 내의 login 모듈css와 page.tsx 코드를 붙여넣기 전까지는 (beforeLogin) 폴더 내의 layout.tsx와 page.tsx에 의해 동작할 때 같은 화면에 패러렐 모달이 동작하였는데 해당 css 붙여넣는 순간 새로운 창이 팝업되면서 패러렐 모달이 로그인 창으로서 뜨는 것이 어떻게 구현되는 것인지 설명이 안되어서 그 부분이 궁금해 지길래, 코드를 다운받아 하나씩 뜯어보면서 비교해보려 했는데요... 코드 다운을 하려 보니 1챕터가 다 끝난 이후에 코드가 정리되어 있어서 해당 폴더에 이 강의에서 설명하는 코드 파일이 없네요. 강의 후기에서 정리가 잘 안되어 있다고 후기 남긴 일부는 이런 것을 얘기한 것 같네요... 해당 팝업 기능은 어떤 부분에서 구현되는 것인지, 단순히 css 붙여넣기 만으로 구현이 안될 것 같은데, 그런 기능이 따로 있는 것인지 알려주시면 감사하겠습니다. 뒤의 강의 계속 보다 보면 나올지 모르기에 일단 여기다 질문 넘기고 다음 강의 듣겠습니다. 혹시 뒤에서 설명을 해주시는게 맞더라도, 이 영상 보고서 그런 고민을 하고 있는 분들이 생길 수 있으니, 지금 영상 수업 질문에 간단히라도 알려주시면 감사하겠습니다.
안녕하세요. 회원가입을 하려고 할 때 이상한 점이 몇 가지 있어 질문을 남겨봅니다. 삽질을 하다가 다른 분의 질문을 보고 npm i next-auth@5.0.0-beta.3 이건 적용을 해본 상태입니다. [auth][error] UnknownAction: Cannot parse action at /api/auth/session localhost:3000 으로 접속하고 나면 잠시 뒤에 콘솔에 이런 에러가 뜹니다. 회원가입이 되지 않는 문제 아이디, 닉네임, 비밀번호, 이미지를 넣고 회원가입을 하면 [auth][error] UnknownAction: Cannot parse action at //callback/credentials .Read more at https://errors.authjs.dev#unknownaction at parseActionAndProviderId (webpack-internal:///(action-browser)/./node_modules/@auth/core/lib/utils/web.js:87:27) at toInternalRequest (webpack-internal:///(action-browser)/./node_modules/@auth/core/lib/utils/web.js:32:40) at Auth (webpack-internal:///(action-browser)/./node_modules/@auth/core/index.js:82:103) at signIn (webpack-internal:///(action-browser)/./node_modules/next-auth/lib/actions.js:55:71) at signIn (webpack-internal:///(action-browser)/./node_modules/next-auth/index.js:82:75) at $$ACTION_0 (webpack-internal:///(action-browser)/./src/app/(beforeLogin)/_lib/signup.ts:53:60) at async /Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:39:406 at async t0 (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:5773) at async rh (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:39:23636) at async doRender (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1391:30) at async cacheEntry.responseCache.get.routeKind (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1552:28) at async DevServer.renderToResponseWithComponentsImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1460:28) at async DevServer.renderPageComponent (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1843:24) at async DevServer.renderToResponseImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1881:32) at async DevServer.pipeImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:909:25) at async NextNodeServer.handleCatchallRenderRequest (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/next-server.js:266:17) at async DevServer.handleRequestImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:805:17) TypeError: Invalid URL at new URL (node:internal/url:775:36) at signIn (webpack-internal:///(action-browser)/./node_modules/next-auth/lib/actions.js:61:19) at async $$ACTION_0 (webpack-internal:///(action-browser)/./src/app/(beforeLogin)/_lib/signup.ts:53:9) at async /Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:39:406 at async t0 (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:38:5773) at async rh (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/compiled/next-server/app-page.runtime.dev.js:39:23636) at async doRender (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1391:30) at async cacheEntry.responseCache.get.routeKind (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1552:28) at async DevServer.renderToResponseWithComponentsImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1460:28) at async DevServer.renderPageComponent (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1843:24) at async DevServer.renderToResponseImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:1881:32) at async DevServer.pipeImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:909:25) at async NextNodeServer.handleCatchallRenderRequest (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/next-server.js:266:17) at async DevServer.handleRequestImpl (/Users/moonhyunjun/Desktop/study/frontend/z.com/node_modules/next/dist/server/base-server.js:805:17) { code: 'ERR_INVALID_URL', input: 'undefined' } 이런 에러가 뜨며 회원가입이 되지 않습니다. 그런데 npm i next-auth@5.0.0-beta.3 이걸 적용하기 전에는 1번에서 언급한 에러는 떠 있어도 회원가입은 정상적으로 됐었는데 beta.3 버전을 설치한 이후에는 회원가입이 아예 안 되네요. 회원가입 후 로그아웃 버튼이 보이지 않는 문제 이건 회원가입이 정상적으로 됐을 때 궁금했던 부분입니다.회원가입이 되면 /home으로 리다이렉트가 됐었는데 그런데 전 로그아웃 버튼이 보이지가 않더라구요. useSession() 으로 데이터를 받아오지 못 해 null 을 리턴해서 그랬던 것이 맞을까요?
안녕하세요 강의 보면서 다른 프로젝트 진행 중 입니다. login을 msw로 구현하는곳에서 막혀서 질문드립니다. 로그인 버튼을 누르면 http://localhost:3000/api/auth/erro r 이쪽으로 이동하며 404페이지가 뜹니다 서버에서 에러를 떨궈주면 유추라도 하겠지만 9090번 3000번 둘 다 에러를 떨궈주지 않습니다.. 다른 질문글 중에 @auth/core와 next-auth의 버전을 변경해서 해결됬다는 글도 참고했지만 저는 해결되지않았습니다. 그리고 강의 중에 api/auth/signin 으로 들어가면 next-auth에서 제공하는 버튼이 뜨던데 저는 뜨지 않습니다.. 답변 부탁드립니다 감사합니다. 추가) 로그인시 api/login에 요청할때 네트워크 탭에서 localhost:3000/api/login이 아닌 localhost:3000/api/auth/error로 떨구는지도 궁금합니다. -----------------------------------감사합니다-------------------------
SignupModal 만드는 과정에서 질문이 있습니다. useFormState 훅을 사용할 때 계속 에러가 나서 signup.ts 파일을 커뮤니티를 참고해서 수정해줬습니다. return {message: null } 을 추가해주는 식으로요. 그러고나서 showMessage 함수를 만드는데, 강의에서는 showMessage 함수의 파라미터의 타입이 string 이라고 하는데 제 꺼에선 실제로 들어가는 값이 string | null 이라고 나오면서 에러가 발생합니다. 초기 state 도 { message: null } 이고, signup.ts 에서도 { message: null } 을 리턴하는 경우가 있어서 이런 것 같은데 제로초님은 강의에서 showMessage 함수의 파라미터 타입을 그냥 string으로 해도 에러가 나지 않는 것이 신기하여 질문 남겨봅니다.
제가 지금 블로그에서 에디터로 이미지를 합해서 백에다가 데이터를 보내고 잇는데 제로초님이 말씀하신데로 해봣는데 이미지의 소스는 imges라는 테이블에 정상적으로 들어가는데 문제는 post에 <p>이미지 </p><p><img src= ">"http://localhost:3065/KakaoTalk_20240122_212009014_01_1707401883946.jpg"></p > 이런식으로 이미지가 들어가게 되는데 에디터라서 이렇게 들어가게 되는게 맞는지 아닌지 궁금합니다... 용량이 걱정이 되서요 ㅠㅠ 이미지로 보여드리면 이런데 원래 에디터안에 들어가는 이미지 같은경우는 텍스트랑 같이 db에 저장시키는게 맞는지 궁금합니다.