퀴즈 질문 풀이 오류
미해결
Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)
저는 아무래도 정답이 C 같은데.. 질문에서 /docs 도 포함되어야 한다고 했으므로, 옵셔널 캐치올만이 루트 경로( /docs )까지 모두 처리할 수 있는거 아닌가요? 다 학습하고 혼란이 오네요..
- react
- 블로그
- next.js
- cursor
- cursorai
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)
저는 아무래도 정답이 C 같은데.. 질문에서 /docs 도 포함되어야 한다고 했으므로, 옵셔널 캐치올만이 루트 경로( /docs )까지 모두 처리할 수 있는거 아닌가요? 다 학습하고 혼란이 오네요..
해결됨
Next + React Query로 SNS 서비스 만들기
안녕하세요. 팔로우 추천 API는 팔로워 수가 많은 순으로 최대 3명을 가져오도록 되어 있는 것으로 알고 있습니다. 현재 발생하는 현상으로는 회원가입한 유저가 없는 경우에 기존 유저에게 추천 목록이 빈 배열로 나타납니다. 그런데 회원가입 후 로그인하면 추천 목록에 로그인한 본인 아이디가 뜨고, 로그아웃 후 기존 유저 A로 로그인하면 이전에 회원가입한 유저 아이디가 추천 목록에 나타납니다. 기존 유저 A가 그 회원가입 한 유저를 팔로우한 상태에서, 다른 기존 유저 B로 로그인하면 A가 팔로우했던 아이디가 추천 목록에서 사라져 있습니다. 팔로우나 언팔로우 기능을 사용할 때 데이터는 정상적으로 들어오는 것으로 확인되고, 팔로워가 있는 아이디가 추천 목록에 나타나야 하는데 빈 배열로 표시됩니다. 어느 부분을 점검해야 문제를 정확히 파악할 수 있을지 감이 잡히지 않아 질문 남겨봅니다..! import { MouseEventHandler } from "react"; import { User } from "@/model/User"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useSession } from "next-auth/react"; type Props = { user: User; }; export default function FollowRecommend({ user }: Props) { const queryClient = useQueryClient(); const { data: session } = useSession(); const followed = !!user.Followers?.find((v) => v.id === session?.user?.id); // 팔로우 const follow = useMutation({ // 호출 시마다 userId를 전달 mutationFn: (userId: string) => { return fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/users/${userId}/follow`, { method: "POST", credentials: "include", }, ); }, onMutate: (userId: string) => { const data: User[] | undefined = queryClient.getQueryData([ "users", "followRecommends", ]); if (data) { // 내가 팔로우 하는 대상 // User 배열 중에 팔로우 버튼을 누른 대상의 userId를 찾아서 그 유저의 Followers 수정 const index = data.findIndex((users) => users.id === userId); const shallow = [...data]; shallow[index] = { ...shallow[index], Followers: [{ id: session?.user?.id as string }], _count: { ...shallow[index]._count, Followers: shallow[index]._count.Followers + 1, }, }; queryClient.setQueryData(["users", "followRecommends"], shallow); } }, onError: (error, userId: string) => { console.error("팔로우/언팔로우 에러:", error); console.log("실패한 userId:", userId); const data: User[] | undefined = queryClient.getQueryData([ "users", "followRecommends", ]); if (data) { const index = data.findIndex((users) => users.id === userId); const shallow = [...data]; shallow[index] = { ...shallow[index], // 내 아이디가 대상 유저의 팔로워 목록에서 빠져야함 Followers: shallow[index].Followers.filter( (f) => f.id !== (session?.user?.id as string), ), _count: { ...shallow[index]._count, Followers: shallow[index]._count.Followers - 1, }, }; queryClient.setQueryData(["users", "followRecommends"], shallow); } }, }); // 팔로우 끊기 const unfollow = useMutation({ mutationFn: (userId: string) => { return fetch( `${process.env.NEXT_PUBLIC_BASE_URL}/api/users/${userId}/follow`, { method: "DELETE", credentials: "include", }, ); }, onMutate: (userId: string) => { const data: User[] | undefined = queryClient.getQueryData([ "users", "followRecommends", ]); if (data) { const index = data.findIndex((users) => users.id === userId); const shallow = [...data]; shallow[index] = { ...shallow[index], Followers: shallow[index].Followers.filter( (f) => f.id !== (session?.user?.id as string), ), _count: { ...shallow[index]._count, Followers: shallow[index]._count.Followers - 1, }, }; queryClient.setQueryData(["users", "followRecommends"], shallow); } }, onError: (error, userId: string) => { const data: User[] | undefined = queryClient.getQueryData([ "users", "followRecommends", ]); if (data) { const index = data.findIndex((users) => users.id === userId); const shallow = [...data]; shallow[index] = { ...shallow[index], Followers: [{ id: session?.user?.id as string }], _count: { ...shallow[index]._count, Followers: shallow[index]._count.Followers + 1, }, }; queryClient.setQueryData(["users", "followRecommends"], shallow); } }, }); const onFollow: MouseEventHandler<HTMLButtonElement> = (e) => { e.stopPropagation(); e.preventDefault(); if (followed) { console.log("언팔로우"); unfollow.mutate(user.id); } else { console.log("팔로우"); follow.mutate(user.id); } };
미해결
[React / VanillaJS] UI 요소 직접 만들기 Part 1
안녕하세요 오늘 강의를 구매했는데, 깃헙클론 부터 초기셋팅 하는법이 어딨는지 몰라서... 혹시 캡처로 첨부드린 내용이 어딨는지 알 수 있을까요?? 감사합니다
해결됨
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
이런식으로 함수 표시 방식인 ()=>{} 이렇게 사용을 하면 삭제 버튼을 눌렀을 때 모든 리스트가 사라집니다. 또한 앞에서 사용했던 map함수 같은 경우에도 강의와는 다르게 중괄호를 쓰면 문제가 생겼어서 소괄호로 바꿨더니 정상적으로 돌아갔었습니다. 현재 위 함수들에는 중괄호를 쓰면 안되는걸까요?? 참고로 map함수는 한 줄이 아니라 여러줄이었는데도 중괄호를 쓰면 에러, 소괄호를 써야 정상작동했었습니다. 정환님 책에는 별다른 말이 없고 강의에도 별다른 얘기가 없어서 미치겠습니다ㅜㅜㅜㅜㅜ
해결됨
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
onUpdate함수를 TodoItem에도 넣어줘야한다는꺼까지 알겠습니다. input의 onChange일때 onChangeCheckbox를 넣어줘야한다는 것도 알겠습니다. 하지만 왜 onChangeCheckbox 함수 내용이 그냥 onUpdate에 id만 넣어주는걸까요?? 이런식으로 id를 반환해주려면 해당 이벤트가 일어났을때 target의 id를 반환해줘야 하는거 아닐까요???? 왜 e를 매개변수로 넣지도 않고 그냥 id만 넣어도 되는걸까요? 강의 내용에 궁금한 점이 있다면 몇 챕터의 몇 분 몇 초인지 알려주시면 더 좋아요 8.6 챕터의 5분 20초입니다!
미해결
타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
강의를 다 들었는데 섹션4의 퀴즈가 활성화 되지 않아 수료증을 못받고 있습니다 ㅠㅠ 혹시 뭐 빠트렸나 해서 섹션 4번 강의 다시 다 들었는데도 안되네요.. 확인부탁드립니다
미해결
Git & GitHub, 원리부터 차근차근 - 근본깃
안녕하세요. rebase 단원(이전 강의)의 설명을 들으면서, rebase 란 fast-forward merge 를 수행할 수 있게끔 commit history 를 flatten 해 주는 작업으로 이해했는데요. rebase 과정에서도 conflict 가 발생하고, 이것을 처리해줄 필요가 있다면, 그냥 3-way merge 에서 conflict 를 처리하는 것과 근본적인 차이가 있을까요? 제 생각으로는 rebase 과정에서는 branch 에서 떨어져 나간 commit 들이 생기고, 3-way merge 에서는 기존 commit 들이 병합된 branch 안에 들어있다, 는 차이 정도밖에 없는 것 같은데요. 굳이 3-way merge 말고 rebase 를 사용해야 할 필요가 있을까요?
미해결
타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
안녕하세요 css 쪽 학습 중에 있는데, style-component에 작성중인데 강사님의 화면과 다르게 실행은 제대로 되나 아래 화면과 같이 그냥 문자열처럼 갈색 표시가 되는데 그래서 css 문구 추천이 안되는 것 같은데 어떤 문제인가요?
미해결
React Native with Expo: 제로초에게 제대로 배우기
강의 중에는 PanResponder.create에 들어가는 객체의 속성으로 onStartShouldSetPanResponder를 소개하지만, 작동이 안되서 Github 코드를 살펴보니 onMoveShouldSetPanResponder로 해야 함 const panResponderRef = useRef( PanResponder.create({ onStartShouldSetPanResponder: () => true, // Pan 작업에 반응하도록 설정 onPanResponderMove: (event, gestureState) => { ... 수정 후 const panResponderRef = useRef( PanResponder.create({ onMoveShouldSetPanResponder: () => true, // Pan 작업에 반응하도록 설정 onPanResponderMove: (event, gestureState) => { ...
해결됨
한 입 크기로 잘라먹는 Next.js
예를 들어 로그인이 되지 않는 경우는 메뉴가 굳이 나올필요가 없어서.. 세션이 미존재면 보이지 않게 처리 했는데.... 이렇게 처리하는 방법이 일반적이지는 않을거 같은데.... 보통 로그인이 되지 않아 메뉴가 필요 없는 페이지는 어떻게 처리하나요? export default async function RootLayout({ children }: Readonly<{ topmenu: React.ReactNode; children: React.ReactNode; }>) { const cookie = (await cookies()).get("session")?.value; const session = await verify(cookie); return ( <html lang="en"> <body className={`${geistSans.variable} ${geistMono.variable} antialiased`} > {/* 세션이 undefined가 아닌 경우 TopNavigationMenu를 렌더링합니다. 'undefined'는 문자열이 아닌 JavaScript의 실제 undefined 값입니다. */} { session!==undefined&&<TopNavigationMenu/> } <main> {children} </main> </body> </html> ); }
해결됨
웹 개발자의 연봉을 올려주는 하이브리드앱 with Expo 프레임워크
React Native에서 바텀 네비게이션을 만들었다면, 웹에서는 바텀 네비게이션이 나오게하려면 어떻게 해야하나요?
미해결
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
https://github.com/ksm0584-star/one-bite_react.git 안녕하세요! 초보자도 이해하기 쉽게 잘 설명해주셔서 강의 감사드리며 듣고 있습니다. 처음으로 문제가 생겼는데요 ㅠㅠ index.html에서 favicon으로 변경한 것과 meta 코드를 넣어준 것이 웹에 적용이 되지 않습니다. 분명 저장을 하고 새로고침을 해주어도 개발자 모드로 들어가보면 적용이 하나도 안되어 있어요. 그리고 배포는 되는데 하고 나면 favicon과 meta코드가 초기화 되어 있습니다. 무엇이 문제일까요? 다음 강의에 있는 vercel login도 되지 않습니다. zsh: command not found: vercel 이렇게 뜨네요 ㅠㅠㅠ 답변해주시면 정말 감사하겠습니다!
해결됨
[VOD] 6주 완성! 개발 실무를 위한 고농축 바이브코딩 (Cursor AI, Figma)
현재 바이브코딩 강의를 구입한 사람입니다. 저는 현재 자영업을하면서 향후 웹서비스 창업을염두해서 본강좌를 미리 구입해둔상태이고 학습을 할수있는 상황은아닙니다. 쿠폰보니까 첼린지 쿠폰이 발급되어있던데 이미 강의를 구입한사람일경우 첼린지강의를 신청하면 새로운내용을 더 얻어갈수있는건가요??? 기존강의구입자들은 첼린지를 어떻게 생각해야할지요?
해결됨
코드로 배우는 React 19 with 스프링부트 API서버
private String makeTempPassword() { StringBuffer buffer = new StringBuffer(); for(int i = 0; i < 10; i++){ buffer.append( (char) ( (int)(Math.random()*55) + 65 )); } return buffer.toString(); } 해당 코드에서 StringBuilder가 아닌 StringBuffer를 사용하는 이유가 따로 있나요?? 성능적으로 큰 차이는 없겠지만 혹시 특별한 이유가 있는지 궁금해서 여쭤봅니다!!
미해결
React 완벽 마스터: 기초 개념부터 린캔버스 프로젝트까지
안녕하세요 강사님. 강의 잘 듣고 있습니다. 배열 업데이트하기 1탄 강의 보고 있는데 궁금한 점이 있습니다. 강의 11:28에서 button onClick 이벤트에 onDeleteTodo 함수를 넘기는데요. 강의에서는 onClick={() => onDeleteTodo(item.id)} 이런 형식으로 넘기고 있는데 다른 부분에는 onClick={onDeleteTodo} 이런식으로 사용하기도 하셔서요. (강의에서 이렇게 사용했다는게 아닙니다. 예시입니다.) onClick={() => onDeleteTodo(item.id)} onClick={onDeleteTodo} 이 두가지를 언제 어떻게 구분해서 사용해야 하는지 궁금합니다.
미해결
타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
섹션 4번 수업을 다 봤는데 퀴즈가 활성화가 안됩니다 ㅠㅠ 어떻게 하면 될까요>?
미해결
Next.js with Spring Boot
안녕하세요. 강의를 보면서 차근차근 작업중인데요. 테스트 하다보니 한글로 제목과 내용을 작성하고 등록을 하면 등록이 완료되었다고 뜨나 실제 리스트 페이지에선 업데이트가 되지않고 있습니다. 제가 설정을 빠트린게 있는걸까요? 실제로 영문이나 숫자로만 입력후 등록하면 리스트에도 잘 반영됩니다.
미해결
[VOD] 6주 완성! 개발 실무를 위한 고농축 바이브코딩 (Cursor AI, Figma)
피그마 mcp연결이 안되요...링크주신 피그마도 유료계정결제하고 피그마연결블로그도 보고했는데.. 연결되었다고 나오는데 커서에 세팅에 빨간불이 안없어지고 [INFO] Connecting to Figma socket server at ws://localhost:3055... [INFO] FigmaMCP server running on stdio [INFO] Connected to Figma socket server [DEBUG] Received message: "Please join a channel to start chatting" [LOG] myResponse"Please join a channel to start chatting" [INFO] Received broadcast message: "Please join a channel to start chatting" 이런에러만뜨고요.. 로그를 보니 피그마 소켓 서버에는 연결이 되었지만, 채널에 참여하라는 메시지가 계속 표시되고 있습니다. 이는 피그마 플러그인이 실행 중이지만 채널 연결이 완료되지 않았다는 의미입니다. 피그마에서 다음 단계를 확인해보세요: 피그마 앱에서 Cursor Talk to Figma 플러그인이 실행되고 있는지 확인 플러그인에서 채널 생성 또는 참여가 필요할 수 있음 플러그인에서 채널 ID(udfelzqr)를 정확히 입력했는지 확인 피그마 플러그인 측에서 채널 연결이 완료되어야 터미널에서 실행한 명령이 제대로 작동할 수 있습니다. 현재는 이미 구현한 색상 토큰 시스템을 계속 사용하는 것이 좋겠습니다. 피그마 연결이 필요하시면 피그마 플러그인 설정을 다시 확인해주세요. 커서는 이렇게이야기하는데 왜 안되는지 알수가없습니다..ㅠㅠ
해결됨
[VOD] 6주 완성! 개발 실무를 위한 고농축 바이브코딩 (Cursor AI, Figma)
안녕하세요. 강의를 이전에 구매하였는데 해당 강의가 챌린지 형태로 진행한다고 들었습니다. 기존 구매자는 챌린지에 참여할 수 없을까요?
해결됨
한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
76. 11.3) Context 분리하기 useMemo 를 이용해서 onCreate, onUpdate, onDelete 를 한번만 생성이 되게 한거는 이해 하는데요, 그럼 이 경우에 기존에 사용했던 useCallback 은 삭제 해도 무방 한가요? const onCreate = (content) => { dispatchFunc({ type : "CREATE", data : { id : idRef.current++, isDone : false, content: content, date : new Date().getTime(), }, }); };