묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
React.memo object props 값 이외에 함수 비교
리액트는 주소값 비교로 object 를 비교 하려면 따로 로직을 짜주어야 하는데,이 강의에서 editor 또한 memo 로 컴포넌트 최적화 하려 했지만 안되던데 따로 이전 prop 값과 이후 prop 값을 비교해줘야 하나요? 만약 그렇다면, 왜 react는 prop 으로 전달된 함수는 변하지 않음에도 변했다고 인식하는지가 궁금하고 어떻게 비교해야하는지 궁금합니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
프로젝트 중간에 프레임워크와 언어를 변경할수 있나요?
안녕하세요.현재 업데이트 된 강의를 보면서 프로젝트를 만들고 있습니다.그런데 중간에 typescript를 사용하기로 해서 잘라먹는 타입스크립트도 같이 결제 해서 들을려고 합니다.하지만 타입스크립트 강의는 vite를 사용하지 않는거 같아서 타스를 적용하기 전에 질문드립니다. vite로 프로젝트 만들고 있는 중간에 타입스크립트를 사용할수 있게 변경할 수 있나요?vite를 안쓰고 잘라먹는 리액트 강의를 들으면 따라가기 불가능 할까요?혹시 타스 강의도 업데이트 할 예정이 있으신가요?
-
미해결Next + React Query로 SNS 서비스 만들기
AuthProvider 사용 시 서버 컴포넌트가 궁금합니다.(+ API 관련)
안녕하세요. 항상 강의 잘 보고 있습니다! return ( <html lang="en"> <body className={inter.className}> <MSWComponent /> <AuthSession> {children} </AuthSession> </body> </html> )next-auth 강의 내용 중 최상위 layout.tsx에서 위 코드와 같이 AuthSession 감싸주신 걸 볼 수 있는데 이는 next-auth에서 제공하는 SesisonProvider를 통해 감싸진 자식 컴포넌트들에서 session 데이터를 공유하기 위함으로 이해하였습니다. 그런데 SessionProvider는 useSession 훅을 사용하는 컴포넌트에 대해 session 데이터를 공유하는 것이기에 "use client"가 사용되는데 최상위 layout 파일에 AuthSession으로 그것의 children을 감싸게 되면 그 아래에 포함된 모든 컴포넌트들이 전부 클라이언트 컴포넌트가 되기 때문에 이렇게 되었을 때 계층 아래의 서버컴포넌트들이 제대로 서버 컴포넌트로써 작동할 수 있는지가 궁금합니다. 그래서 useSession을 사용해야 하는 컴포넌트의 상위에서만 해당 provider로 감싸주고 서버 컴포넌트에서 session이 필요한 경우 해당 provider로 감싸지 않아도 session을 가져올 수 있지 않나 궁금증이 들어 질문드립니다.
-
해결됨Next + React Query로 SNS 서비스 만들기
로그인시 오류페이지로 이동됩니다
해당 영상에서 질문들을 참고해봐서 그나마 재영님 질문과 비슷해서 버전 문제일 수 있을 것 같아 버전도 낮춰보고 했음에도 해결이 되지 않아 새로 질문 올립니다.. [[[ 문제점 ]]]아이디와 패스워드를 치고 로그인을 눌렀을 때 오류페이지로 이동됩니다.정상적일때 경로 => [ localhost:3000/home ]현재 이동되는 경로 => [ localhost:3000/api/auth/error ][ 해당 사진 ][ 적용했었던 버전 내역 ]next-auth@5.0.0-beta.3next-auth@5.0.0-beta.4next-auth@5.0.0-beta.11@auth/core@0.19@auth/core@0.27 [ 디렉토리 구조 ] [ 코드 ]envNEXT_PUBLIC_BASE_URL=http://localhost:9090 AUTH_SECRET=testtestauth.tsimport NextAuth from "next-auth" import CredentialsProvider from "next-auth/providers/credentials"; export const { handlers: { GET, POST }, auth, signIn, } = NextAuth({ pages: { signIn: '/i/flow/login', newUser: '/i/flow/signup', }, providers: [ CredentialsProvider({ async authorize(credentials) { const authResponse = await fetch(`${process.env.NEXT_PUBLIC_BASE_URL}}/api/login`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: credentials.username, password: credentials.password, }), }) if (!authResponse.ok) { return null } const user = await authResponse.json() return user; }, }), ] });mocks/handlers.tsimport {http, HttpResponse, StrictResponse} from 'msw'; export const handlers = [ http.post('/api/login', () => { console.log('로그인'); return HttpResponse.json({ userId: 1, nickname: '프림입니다만', id: 'pream', image: '/5Udwvqim.jpg' }, { headers: { 'Set-Cookie': 'connect.sid=msw-cookie;HttpOnly;Path=/' } }); }), http.post('/api/logout', () => { console.log('로그아웃'); return new HttpResponse(null, { headers: { 'Set-Cookie': 'connect.sid=;HttpOnly;Path=/;Max-Age=0' } }); }), http.post('/api/signup', async ({ request }) => { console.log('회원가입'); // return HttpResponse.text(JSON.stringify('user_exists'), { // status: 403, // }) return HttpResponse.text(JSON.stringify('ok'), { headers: { 'Set-Cookie': 'connect.sid=msw-cookie;HttpOnly;Path=/;Max-Age=0' } }) }), ];@/app/(beforeLogin)/_components/LoginModal.tsx"use client"; import { ChangeEventHandler, FormEventHandler, useState } from "react" import style from "@/app/(beforeLogin)/_components/login.module.css"; import { signIn } from "next-auth/react"; import { useRouter } from "next/navigation"; export default function LoginModal() { const [id, setId] = useState(''); const [password, setPassword] = useState(''); const [message, setMessage] = useState(''); const router = useRouter(); const onSubmit: FormEventHandler<HTMLFormElement> = async (e) => { e.preventDefault(); setMessage(''); window.alert('aaa'); try { await signIn("credentials", { username: id, password, redirect: false, }); window.alert('bbb'); router.replace('/home'); } catch (err) { console.error(err); setMessage('아이디와 비밀번호가 일치하지 않습니다.'); } }; const onClickClose = () => { router.back(); }; const onChangeId: ChangeEventHandler<HTMLInputElement> = (e) => { setId(e.target.value); }; const onChangePassword: ChangeEventHandler<HTMLInputElement> = (e) => { setPassword(e.target.value); }; return ( <div className={style.modalBackground}> <div className={style.modal}> <div className={style.modalHeader}> <button className={style.closeButton} onClick={onClickClose}> <svg width={24} viewBox="0 0 24 24" aria-hidden="true" className="r-18jsvk2 r-4qtqp9 r-yyyyoo r-z80fyv r-dnmrzs r-bnwqim r-1plcrui r-lrvibr r-19wmn03"> <g> <path d="M10.59 12L4.54 5.96l1.42-1.42L12 10.59l6.04-6.05 1.42 1.42L13.41 12l6.05 6.04-1.42 1.42L12 13.41l-6.04 6.05-1.42-1.42L10.59 12z"></path> </g> </svg> </button> <div>로그인하세요.</div> </div> <form onSubmit={onSubmit}> <div className={style.modalBody}> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="id">아이디</label> <input id="id" className={style.input} value={id} onChange={onChangeId} type="text" placeholder=""/> </div> <div className={style.inputDiv}> <label className={style.inputLabel} htmlFor="password">비밀번호</label> <input id="password" className={style.input} value={password} onChange={onChangePassword} type="password" placeholder=""/> </div> </div> <div className={style.message}>{message}</div> <div className={style.modalFooter}> <button className={style.actionButton} disabled={!id && !password}>로그인하기</button> </div> </form> </div> </div> ) }여기서 onSumbit 함수 부분에서 alert를 중간에 넣었는데window.alert('aaa')은 떴고,확인 버튼 누르고, 다음 window.alert('bbb')가 뜨자마자 바로 에러 페이지로 이동됩니다. ( 확인 버튼 조차 못누르고 바로 이동됩니다 ) 그리고 auth.ts 에서는 재영님 질문처럼 터미널 로그들이 안찍힙니다... 9090 서버는 잘 띄워놨었구요.회원가입 로그는 잘 나오는데 로그인 로그는 안뜹니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
tailwind css 문제인지, className 에 적용한 css가 적용되지 않아요.
tailwind css 문제인지, className 에 적용한 css가 적용되지 않아요.아래는 제 package.json 인데, 특정 버전으로 진행해야 하나요? "dependencies": { "axios": "^0.26.1", "classnames": "^2.3.1", "dayjs": "^1.11.4", "env-cmd": "^10.1.0", "next": "12.1.4", "react": "18.0.0", "react-dom": "18.0.0", "react-icons": "^4.4.0", "sharp": "^0.30.7", "swr": "^1.3.0" }, "devDependencies": { "@types/node": "17.0.23", "@types/react": "17.0.43", "@types/react-dom": "17.0.14", "eslint": "8.12.0", "eslint-config-next": "12.1.4", "postcss-preset-env": "^7.4.3", "tailwindcss": "^3.0.23", "typescript": "4.6.3" }
-
해결됨Next + React Query로 SNS 서비스 만들기
MSW response가 안 보이면?
안녕하세요 제로초님.3-1 부분에서 client 컴포넌트에서 서버액션 사용하기로 msw를 처음으로 사용하려고 시도중입니다.와중에 브라우저 네트워크 탭 response에 아무것도 나오지 않고 있어 해결법을 찾지못해 질문드립니다.저랑 비슷한 오류 생기신 분들 질문을 다 본 거 같은데, 해결이 되진 않네요.우선, handlers 코드입니다.Mock server 터미널에는 "회원가입" 콘솔이 잘 나오고 있습니다.다음은, client component에서 서버액션을 위한 signup.ts입니다.이 또한 터미널에서 base url경로와 "success!"와 200이 잘 나오고 있습니다.다음은 네트워크 탭에 정보입니다.생년월일 정보는 제가 추가한 정보입니다.response 탭에 아무것도 나오지 않습니다. 실제 모달을 띄우는 컴포넌트는 onSubmit 함수 import와 이 부분 이외에 아무것도 추가하지 않았습니다..env파일 및 .env.local 입니다. package.json입니다.어떤 부분을 추가로 해보면 좋을까요??
-
미해결처음 만난 리액트(React)
수업을 들으면서 느낀점
아직 리액트쪽 실무경험이 적어 어느 상황에 어느 것을 사용해야할지 머리속에 아직 안그려지는 문제.백엔드까지 연결해서 DB도 연결된 상태로 CRUD를 가져갔으면 더 좋은 내용이지 않았을까 하는 생각이 듭니다.강사님 발음이 정확하셔서 듣는내내 잘들었습니다. 개인적인 리액트 장점 : 재사용성, JSX를 활용한 간소화 문법들, 메타라는 대기업 지원, 최근 많이 사용하는 CSR개발언어 개인적인 리액트 단점 : 머리속에 컴포넌트 설계와 어떤 걸 어떻게 써야하지 라는 생각이 많이듬. 생각보다 비지니스 외 조금은 복잡한 개발방식을 가져서 다른 분이 짜놓은 코드를 볼때 조금은 어려움이 있을것 같다라는 생각.좋은 내용의 강의 감사합니다.
-
미해결처음 만난 리액트(React)
bottom up 방식 방향으로 개발하는게 익숙치가 않네요
기존 SSR개발자입니다.실습따라하다보니 bottom up 방식 방향으로 개발하는게 익숙치가 않네요.thymeleaf나 JSP개발시엔 html 틀은 만들어놓고 기능을 추가하는 방식으로 개발해서 인지 수업순서가 적응이 안되네요. 혹시 bottom up 방식으로 하시는 이유가 있을까요?그냥 궁금해서 여쭤봅니다. 섹션17을 제외한 수업은 전부 완강했습니다.문법이 어려운거 보다 개념이 낯설어 개인적으론 어려웠습니다. 연습을 계속 하다보니 개념은 어느정도 익숙해졌습니다. 그러나 아직 머리속에 그림이 완벽하게 그려지진 않네요.감사합니다.
-
미해결생활코딩 - React
9강 배포하는법
Nodejs가 자체적으로 HTTP Server를 가지고 있는데 npm serve를 따로 설치하고 배포하는 이유가 뭔가요? 로컬에서 개발할때만 Node의 HTTP를 사용하고실제 운영은 별도의 Web server를 사용해서 그런가요?
-
미해결처음 만난 리액트(React)
질문드립니다.
마지막 실습파트 하고 있습니다.create-react-app으로 mini-blog 만들었는데요. react 18점대 버전으로 해도되나여?
-
해결됨실무에 바로 적용하는 스토리북과 UI 테스트
스토리 제작할 때 궁금한 점
metadata의 argTypes를 작성한 것들을 스토리의 전달 인자에 다 작성하는 걸로 알고 있었는데, 이벤트 핸들러를 작성하지 않아도 되는 이유를 알고 싶습니다. 그리고 왜 저는 이벤트 핸들러를 작성하지 않으면 오류가 나는지 궁금합니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
라이프사이클 질문!
안녕하세요 라이프 사이클에대해서 궁금하게 있어 질문 드립니다.처음에 컴포넌트가 빌드 되었을때(초기랜더링) 마운트 되었다 라고 표현하고, 이미 빌드가 된 컴포넌트에서 반응형 state로 인해 리랜더링이 되면 업데이트,그리고 컴포넌트가 제거되면 언마운트라고 알고 있습니다 !혹시 그렇다면 업데이트가 이루어질때 컴포넌트가 리랜더링 되는데, state가 초기화 되지 않는걸 보면 컴포넌트가 삭제되지 않고 리랜더링 되는것 같다는 추측을 하고 있습니다.만약 그렇다면 컴포넌트가 어떻게 삭제되지 않고 리랜더링을 진행 할 수 있는건가요 ?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
남겨주신 Counter App 데모사이트
남겨주신 Counter App 데모사이트가 잘못된것 같아요 링크로 이동하면 자바스크립트 강의 자료가 나오네요
-
해결됨Next + React Query로 SNS 서비스 만들기
session error/쿠키 정보가 저장 안됐을 때
mook 새롭게 실행 시켜봤는데도 세션이 에러가 계속 뜹니다.로그인창에 선생님처럼 정보가 저장 안되있고 handlers-> User정보를 입력하면 패이지가 이동 되는데localhost:3000/api/auth/error 이동되고 /home는 안가네요회원가입 id,name,비번,사진 입력해서 만들고 /home이동 되었는데 로그아웃 버튼이나 추천컨텐츠는 안 나와요localhost:9090 치면이렇게 나오네요 .회원가입(localhost:3000/i/flow/signup)->/home->잘 가기는 하는데 네트워크에서는 세션 에러가 됩니다. 무든 코드 선생님꺼로 바꿔봤는데 해결 방법 찾지 못해서 3-1코드 부분에서 멈쳐있습니다. 감사합니다.
-
해결됨[React 2부] 고급 주제와 훅
[4.1장 레프 훅] useRef관련 질문이있습니다.
안녕하세요 선생님 본 강의 예시에서import MyReact from "./lib/MyReact"; import React from "react"; export default () => { const ref1 = MyReact.useRef(1); const ref2 = MyReact.useRef(); const [state, setState] = React.useState(0); console.log(state) if (state > 2) { console.log("hihi"); ref1.current = ref1.current + 1; } return ( <> <button onClick={() => setState(state + 1)}> state increase (state: {state}) </button> <div>{ref1.current}</div> <input ref={ref2}></input> <button onClick={() => console.log("input value", ref2.current.value)}> ref2 select </button> </> ); };state >2 이면 값이 증가하는것을 확인했는데 이후에도 계속 state가 2 초과 이니까 계속 ref1.current가 증가할 줄 알았는데 아니더라구요 왜그런건가요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
프론트 ip로 들어갈때 연결이 안됩니다....
지금 빌드까지 마친 상황이고 sudo npx pm2 start npm -- start 이후 sudo npx pm2 monit을 하엿는데 이러한 에러가 나옵니다.https://github.com/jinhwansong/blog 다른 분들의 이야기를 보면 비슷한 에러가 나는거 같기는 한데 답을 모르겟어요 ㅠㅠ
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
제로초님 프론트서버를 배포하려는데 문제가....
지금 계속 프론트서버에서 npm run build를 하려는데 왠지는 모르겟는데 빌드가 되다가 멈추는 현상이 생깁니다. 여기서 멈추고 30분째 가만히 있는데 이유가 따로 있을까요? 우분투 서버는 Ubuntu Server 22.04 LTS (HVM), SSD Volume Type 이거를 사용했고 인스턴스 유형은 t2.micro입니다..
-
미해결웹 게임을 만들며 배우는 React
memo, PureComponenet, shouldComponentUpdate 관련 질문
안녕하세요 늘 강의 잘 보고 있습니다! 강의를 보던 중 궁금한 점이 생겨 질문 남깁니다ㅠㅠ 위 코드에서 Try 컴포넌트는 PureComponenet로 작성해서 props가 바뀌지 않으면 업데이트되지 않습니다.하지만 ul태그를 제거하면 업데이트 되지 않던 Try컴포넌트가 계속 업데이트가 됩니다. map을 태그로 감싸지 않으면 PureComponent, memo, shouldComponentUpdate 다 작동을 안하더라구요.. 이유가 뭔지 모르겠습니다 ㅠㅠ
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
클래스질문입니다
1-5에서 8분10초대에서class meta에서db_tables=songs를 데이터베이스 안에서 어떤 경로로 봐야하나요?class song의 클래스라고했는데 어디를 가리키는건지를 잘 이해를 못했습니다 class song은 바로 옆에 사진처럼 바로 이해했는데class meta쪽에서 약간 어디로봐야할지 약간 헷갈립니다!..
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
05-03-static-routing-board-query
데이터가 사라진건가요 .. null 떠서 강의을 맞춰 가기가 힘들어요 ㅠㅠ