묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
[해결완료] 실습용 백엔드 서버 연결 오류
혹시나 아래와 같은 오류가 발생하시는 분들중에 비밀번호도 다 알맞게 설정했는데 오류가 발생하신다면 supabase에 새로운 project를 생성하여 시도해보시는 것도 좋을 것 같아요! 계속 안 되다가 새로 만들어서 시도했더니 되네요...ㅠㅠ며칠동안 해결하려고 노력했다가 log보고 그냥 다시 만들어볼까해서 시도해봤는데 해결했습니다..ㅎ다른 분들이 올려주신 오류와 유사하게 supabase와 연결하는 과정에서 오류가 발생합니다. supabase database log를 확인하였을 때에 error는 확인되지 않고, 비밀번호를 수정해봐도 오류가 바뀌지 않습니다. 비밀번호가 틀릴 경우에도 log에 error는 확인되지 않는걸까요?
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
피그마 링크는 어디 있을까요?!
피그마 링크를 못찾겠어요ㅠ 이미지 다운 받아야 하는데 어디서 볼 수 있을까요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
컴포넌트 외부에 선언한 함수에 대하여 질문드립니다.
안녕하세요 강의 재밌게 잘 듣고 있습니다~ 수업 내용 중 getMonthlyData은 Home 컴포넌트 외부에, getSortedData는 DiaryList 컴포넌트 내부에 작성하셨는데요.이전 강의 내용에 따르면 getMonthlyData를 컴포넌트 외부에 작성하신 이유는 Home 컴포넌트가 재렌더링 될 때 다시 선언할 필요가 없어서가 맞나요??그렇다면 비슷한 이유로 getSortedData도 컴포넌트 외부에 작성 가능할 것 같은데 안쪽에 작성하신 이유가 궁금합니다. props를 받아서 계산하고 있긴 하지만 인자값으로 넘겨주면 될 것 같아서요감사합니다.
-
미해결아바타 커뮤니티앱 만들기 (React Native Expo)
[5-4]글 수정/삭제 기능 구현하기(2) - API연동 부분에서 수정하기 누르면 제목과 내용이 비어있는데요,,, 한번 더 수정하기 눌러야 이전 제목과, 내용이 나옵니다...
import CustomButton from "@/components/CustomButton"; import DescriptionInput from "@/components/DescriptionInput"; import TitleInput from "@/components/TitleInput"; import { ImageUri } from "@/types"; import { router, useLocalSearchParams, useNavigation } from "expo-router"; import { useEffect } from "react"; import { FormProvider, useForm } from "react-hook-form"; import { StyleSheet,View } from "react-native"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; import useGetPost from "@/hooks/queries/useGetPost"; import useUpdatePost from "@/hooks/queries/useUpdatePost"; type FormValues= { title:string; description: string; imageUris:ImageUri[]; }; export default function PostUpdateScreen () { const {id} = useLocalSearchParams(); const navigation = useNavigation(); const {data:post} = useGetPost(Number(id)); const updatePost = useUpdatePost(); const postForm = useForm<FormValues>({ defaultValues:{ title:post?.title, description:post?.description, imageUris:post?.imageUris, }, }); const onSubmit = (formValues: FormValues)=> { updatePost.mutate({ id: Number(id), body: formValues, },{ onSuccess:() => router.back(), } ); }; useEffect(()=>{ navigation.setOptions({ headerRight:() => ( <CustomButton label="저장" size="medium" variant="standard" onPress={postForm.handleSubmit(onSubmit)} /> ), }); },[]); return( <FormProvider {...postForm}> <KeyboardAwareScrollView contentContainerStyle={styles.container}> <TitleInput /> <DescriptionInput /> </KeyboardAwareScrollView> </FormProvider> ); } const styles = StyleSheet.create({ container:{ margin:16, gap:16, }, });
-
해결됨React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
req.cookies.token == undefined 현상
logout을 해보니 400BadRequest:이미 로그아웃 됨 상태가 지속됩니다. console.log(req.cookies.token); 출력해보니 undefined 라고 출력됩니다. 쿠키를 제대로 읽지 못하는것 같은데 왜 이런 현상이 뜨는지 궁금합니다.. const express = require("express"); const router = express.Router(); const bcrypt = require("bcrypt"); const User = require("../models/User"); const axios = require("axios"); const jwt = require("jsonwebtoken"); router.post("/signup", async (req, res) => { try { const { username, password } = req.body; const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(400).json({ message: "이미 존재하는 사용자입니다." }); } const hashedPassword = await bcrypt.hash(password, 10); const user = new User({ username, password: hashedPassword, }); await user.save(); res.status(201).json({ message: "회원가입이 완료되었습니다." }); } catch (error) { res.status(500).json({ message: "서버 오류가 발생했습니다." }); console.log(error); } }); router.post("/login", async (req, res) => { try { const { username, password } = req.body; const user = await User.findOne({ username }).select("+password"); //왜인지 password가 select되지 않아서 추가함 if (!user) { return res.status(401).json({ message: "존재하지 않는 사용자입니다." }); } if (!user.isActive) { return res.status(401).json({ message: "비활성화된 사용자입니다." }); } if (user.isLoggedIn == true) { return res.status(401).json({ message: "이미 접속 중인 사용자입니다." }); } const isValidPassword = await bcrypt.compare(password, user.password); //비밀번호 비교 if (!isValidPassword) { user.failedLoginAttempts += 1; user.lastLoginAttempt = new Date(); if (user.failedLoginAttempts >= 5) { user.isActive = false; //다섯번 틀리면 계정 비활성화 ㅋㅋ await user.save(); return res.status(401).json({ message: "비밀번호를 5회 이상 틀려 계정이 비활성화되었습니다.", }); } await user.save(); return res.status(401).json({ message: "비밀번호가 일치하지 않습니다.", remainingAttempts: 5 - user.failedLoginAttempts, }); } user.failedLoginAttempts = 0; user.lastLoginAttempt = new Date(); user.isLoggedIn = true; try { const response = await axios.get("https://api.ipify.org?format=json"); //공공장소 사용금지요 const ipAddress = response.data.ip; //한번 정제함 user.lastLoginIp = ipAddress; } catch (error) { console.log("IP 주소를 가져오는데 실패했습니다: ", error.message); } await user.save(); const token = jwt.sign( { userId: user._id, username: user.username }, process.env.JWT_SECRET, { expiresIn: "24h" } //토큰 만료는 24시간 ); console.log(token); //오 된다 res.cookie("token", token, { httpOnly: true, //자바스크립트에서 쿠키 접근 불가 secure: "production", //https에서만 쿠키 전송 sameSite: "strict", //같은 사이트에서만 쿠키 전송 maxAge: 24 * 60 * 60 * 1000, //24시간 }); const userWithoutPassword = user.toObject(); //구글링 해보니 이렇게 하면 문서 타입을 일반 객체로 변환할 수 있다고 한다 delete userWithoutPassword.password; //보안때문에 비밀번호는 삭제할 수 있다고 한다 res.json({ user: userWithoutPassword }); } catch (error) { console.log("서버 오류: ", error); res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.post("/logout", async (req, res) => { console.log(req.cookies.token); try { const token = req.cookies.token; if (!token) { return res.status(400).json({ message: "이미 로그아웃된 상태입니다." }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET); const user = await User.findById(decoded.userId); if (user) { user.isLoggedIn = false; await user.save(); } } catch (error) { console.log("토큰 검증 오류: ", error.message); } res.clearCookie("token", { httpOnly: true, secure: "production", sameSite: "strict", }); res.json({ message: "로그아웃되었습니다." }); } catch (error) { console.log("로그아웃 오류: ", error.message); res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.delete("/delete/:userId", async (req, res) => { try { const user = await User.findByIdAndDelete(req.params.userId); if (!user) { return res.status(404).json({ message: "사용자를 찾을 수 없습니다." }); } res.json({ message: "사용자가 성공적으로 삭제되었습니다." }); } catch (error) { res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); module.exports = router;
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
[해결 완료] [14:50] 문제가 발생했습니다. 다시 시도하세요
안녕하세요 강사님http://localhost:3000/book/100 URL로 테스트 진행 시에 저는 왜 문제가 발생했습니다. 다시 시도해주세요 문구가 웹페이지에 보이지 않는건가요?[해결 완료]강사님 인강에서 아무리 찾아봐도 fetch-one-book.ts 파일에 if (!response.ok) throw new Error(""); 코드를 추가한 내역이 인강에서 보이지가 않습니다.. 몇 번을 되돌려봐도 못찾고 있습니다. 혹시 누락 사항일까요? import style from "./[id].module.css"; import {GetStaticPropsContext, InferGetStaticPropsType} from "next"; import fetchOneBook from "@/lib/fetch-one-book"; import { useRouter } from "next/router"; export const getStaticPaths = () => { return { paths: [ { params: { id: "1" } }, { params: { id: "2" } }, { params: { id: "3" } }, ], // fallback: "blocking", fallback: true, }; }; export const getStaticProps = async ( context: GetStaticPropsContext ) => { const id = context.params!.id; const book = await fetchOneBook(Number(id)); return { props: { book, }, }; }; export default function Page({ book, }: InferGetStaticPropsType<typeof getStaticProps>) { const router = useRouter(); if (router.isFallback) return "로딩중입니다"; console.log("booktest") console.log(book) if (!book) return "문제가 발생했습니다 다시 시도하세요"; const { id, title, subTitle, description, author, publisher, coverImgUrl, } = book; return ( <div className={style.container}> <div className={style.cover_img_container} style={{backgroundImage: `url('${coverImgUrl}')`}} > <img src={coverImgUrl} alt={""}/> </div> <div className={style.title}>{title}</div> <div className={style.subTitle}>{subTitle}</div> <div className={style.author}> {author} | {publisher} </div> <div className={style.description}>{description}</div> </div> ); }
-
해결됨아바타 커뮤니티앱 만들기 (React Native Expo)
[5-4]글 수정/삭제 기능 구현하기(2) - API연동 부분에서 수정하기 누르면 제목과 내용이 비어있는데요,,, 한번 더 수정하기 눌러야 이전 제목과, 내용이 나옵니다...
수정하기 누르면 한번에 바로 ,이전 제목과 내용이 바로 나오는게 아니고;빈상태로 나오다가, 한번더 수정하기 눌러야 이전 제목과 내용이 나오더라구요;; 한번에 바로 나오게하는 방법은 없을까요?
-
해결됨(2025) MBTI 테스트 기반 수익형 웹사이트 만들기 - <코딩 배워 사업하자>
TEST.js 파일은 어디에 있나요?
안녕하세요! 수업을 듣는데 Test.js 파일이 없어서요다운받은 파일에도 없어요
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
Querydsl 검색처리에서 테스트 결과가 잘 안 나오는 거 같습니다
로직 작성하고 테스트 실행해봤는데 카운트 쿼리까지는 실행된 거 같은데 todoDTO의 결과가 표시되지 않네요하단에 있는 실행 결과를 봐주시고 답변을 해주시면 감사드리겠습니다 혹시 더 필요한 게 있으시면 말씀해 주세요 > Task :clean> Task :compileJava> Task :processResources> Task :classes> Task :compileTestJava> Task :processTestResources NO-SOURCE> Task :testClasses11:41:34.918 [Test worker] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [org.zerock.apiserver.service.TodoServiceTests]: TodoServiceTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.11:41:34.987 [Test worker] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration org.zerock.apiserver.ApiserverApplication for test class org.zerock.apiserver.service.TodoServiceTests . ____ _ __ _ _ /\\ / ___'_ __ _ ()_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.4.1)2025-02-22T11:41:35.222+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : Starting TodoServiceTests using Java 21.0.5 with PID 10348 (started by zzamp in C:\Users\zzamp\Desktop\apiserver\apiserver)2025-02-22T11:41:35.223+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : No active profile set, falling back to 1 default profile: "default"2025-02-22T11:41:35.536+09:00 INFO 10348 --- [apiserver] [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.2025-02-22T11:41:35.578+09:00 INFO 10348 --- [apiserver] [ Test worker] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 35 ms. Found 1 JPA repository interface.2025-02-22T11:41:35.798+09:00 INFO 10348 --- [apiserver] [ Test worker] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]2025-02-22T11:41:35.837+09:00 INFO 10348 --- [apiserver] [ Test worker] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.4.Final2025-02-22T11:41:35.858+09:00 INFO 10348 --- [apiserver] [ Test worker] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled2025-02-22T11:41:36.016+09:00 INFO 10348 --- [apiserver] [ Test worker] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer2025-02-22T11:41:36.033+09:00 INFO 10348 --- [apiserver] [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...2025-02-22T11:41:36.084+09:00 INFO 10348 --- [apiserver] [ Test worker] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.mariadb.jdbc.Connection@7e1d8d412025-02-22T11:41:36.085+09:00 INFO 10348 --- [apiserver] [ Test worker] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.2025-02-22T11:41:36.116+09:00 INFO 10348 --- [apiserver] [ Test worker] org.hibernate.orm.connections.pooling : HHH10001005: Database info: Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 10.11.10 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown2025-02-22T11:41:36.523+09:00 INFO 10348 --- [apiserver] [ Test worker] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)2025-02-22T11:41:36.558+09:00 INFO 10348 --- [apiserver] [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'2025-02-22T11:41:36.897+09:00 WARN 10348 --- [apiserver] [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning2025-02-22T11:41:37.114+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : Started TodoServiceTests in 2.018 seconds (process running for 2.672)Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3WARNING: A Java agent has been loaded dynamically (C:\Users\zzamp\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.15.11\a38b16385e867f59a641330f0362ebe742788ed8\byte-buddy-agent-1.15.11.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future release2025-02-22T11:41:37.366+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.a.repository.search.TodoSearchImpl : search1.................Hibernate: select t1_0.tno,t1_0.complete,t1_0.content,t1_0.due_date,t1_0.title from tbl_todo t1_0 order by t1_0.tno desc limit ?,?Hibernate: select count(t1_0.tno) from tbl_todo t1_02025-02-22T11:41:37.646+09:00 INFO 10348 --- [apiserver] [ Test worker] o.z.apiserver.service.TodoServiceTests : org.zerock.apiserver.dto.PageResponseDTO@11f81488Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended2025-02-22T11:41:37.658+09:00 INFO 10348 --- [apiserver] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'2025-02-22T11:41:37.659+09:00 INFO 10348 --- [apiserver] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2025-02-22T11:41:37.662+09:00 INFO 10348 --- [apiserver] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.> Task :testBUILD SUCCESSFUL in 5s5 actionable tasks: 5 executed오전 11:41:37: 실행이 완료되었습니다 ':test --tests "org.zerock.apiserver.service.TodoServiceTests.testGetList"'.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
enterKey로 페이지 이동 관련 질문
안녕하세요! 섹션3 2.8)페이지별 레이아웃 설정하기 강의에서 20분44초부터 시작하는 enterKey로 페이지 이동하는 부분에서 질문 있습니다 <form>태그 + e.preventDefault() 그리고 onSubmit을 사용하면 클릭+enterKey를 작동하게 할 수 있잖아요 혹시 강사님께서는 file같은 form을 진짜 제출하는게 아닐땐 form태그 사용하는걸 지양하시는 편인가요?? 혹시 그렇다면 이유도 물어봐도 될까요?? 감사합니다!!
-
미해결코로나맵 개발자가 알려주는 React + Express로 지도서비스 만들기 (Typescript)
수업자료 다운로드 시 빈폴더만 나오네요
안녕하세요. 오늘 강의 결제하고 수업 소스코드를 다운받았는데 아무 것도 없는 빈 폴더만 나왔습니다. 그래서 질문 답변에 나왔던 구글 드라이브 링크로 들어가려고 해도 엑세스 거부됨만 나와서 전혀 진행이 돼지 않는 상황이네요...
-
미해결Next + React Query로 SNS 서비스 만들기
queryKey 질문
혹시 useQuery에 작성하는 queryKey와 queryFn함수에 작상하는 next.tags의 queryKey는 무슨 상관관계가 있는 건가요 ? 둘의 값이 무조건 같아야 하는 줄 알았는데 useQuery엔 searchParams / queryFn함수엔 searchParams.q로 작성하셔서 여쭤봅니다. (next.tags엔 문자열만 가능한 점은 알고있습니다 ! )
-
미해결처음 만난 리액트(React)
npx create-react-app my-app 명령어 입력이 잘못된 것 같습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.vs code에서 터미널을 열어 바로 입력하였는데 이런 창이 뜹니다. 어떻게 해결할 수 있을까요?
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
섹션4 조회기능 질문입니다.
선생님, 덕분에 하루하루 조금씩 성장하고 있습니다. 감사힙니다섹션 4 조회 기능을 실행하면 아래와 같이 나오는데 해결 방법을 알고 싶습니다. x를 누르면 정상으로 보입니다. 건강하시기를 바랍니다. 감사합니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
오류 함수
이 빨간색은 왜 뜨는걸까요?
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
TodoList 최적화 질문드립니다.
Editor.jsx 파일은 Props 가 없고단순히 export default memo(editor) 코드만 있으니 당연히 리렌더링이 안되어야 하지만리렌더링이 되고 있습니다.그래서 App.jsx 파일에서<TodoDispatchContext.Provider value={memoizedDispatch}> <Editor /> <List /></TodoDispatchContext.Provider>이렇게 리턴하는걸 <Editor />를 위쪽으로 빼면리렌더링이 안 일어 납니다.dispatchContext 안쪽으로 editor 컴포넌트가 들어가면리렌더링 일어나고 바깥으로 빼면 리렌더링 안 일어 나는거 설명좀 될까요?
-
해결됨React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
npm run dev 무한로딩
npm run dev를 통해 frontend 폴더에서 다음과같이 정상적으로 실행이 되었습니다.다만, 막상 해당 경로로 접속하면 우외같이 무한로딩에 빠져서 아무것도 뜨지 않습니다.F12 개발자도구로 봐도 어떠한 콘솔에러메시지도 없습니다. 어떻게 해결해야 할까요?
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
To-do list 강의 세션에서 궁금한게 있습니다.
선생님 궁금한 게 있어서 글을 남겨봅니다 오늘 To-do list 강의 세션을 완강했는데 이해를 하지 못하는 부분이 있었습니다 const onUpdate = (targetId) => { setTodo( todo.map((it) => it.id === targetId ? { ...it, isDone: !it.isDone } : it ) ); };onUpdate 부분을 만들때 todo.map((it) => it.id === targetId ? { ...it, isDone: !it.isDone } : it 이분에서 ...it : !it.isDone 이 무엇을 의미하는지와 스프레드 연산자를 쓴 이유를 이해하기 어려웠습니다 const onDelete = (targetId) => { setTodo(todo.filter((it) => it.id !== targetId)); }; 에서 todo.filter((it) => it.id !== targetId) 가 삭제를 하기위해 만들어졌는데 .filter((it) => it.id !== targetId filter 를 쓴 이유와 it.id !== targetId 가 뭔지를 아직도 잘모르겠습니다 to-do list 를 배열을 이용하여 상태 관리를 하는것으로 만들었는데 천천히 공부 해보면서 적용 해볼려고 합니다 공부할떄 선생님께서 보는 학습자료나 to-do list 를 만들때 특별히 참고한게 있었는지 궁금합니다
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
저도 수정 페이지 왔을때 설명과 다르게 아무것도 보이지 않습니다.
밑에 같은 질문을 하신 분이 계시던데요.12.15 챕터의 10:33 초에 보면 수정 으로 들어 왔을때기본값으로 수정 전 데이터가 나온다고 되어 있습니다.지금까지 영상을 보면서 같이 코딩을 해오고 있었는데요.. 그런데 밑에 질문 하신 분 처럼 10:33 초 전 까지의 코딩으로는 수정 시 데이터가 나오지 않습니다.그리고 인프런 측 인지..답변 설명에 useEffect 얘기 하시던데.. useEffect(() => { if (initData) { setInput({ ...initData, createdDate: new Date(Number(initData.createdDate)), }); } }, [initData]); 이 부분은 10:33 초 전 까지는 나오지 않았습니다.인프런 측도 답변을 주실려면 정확히 파악 후 답변을 주세요.. 뭐가 잘못된 건가요?useEffect 부분이 없어도 설명대로 수정 으로 들어가면 데이터가 나오는게 맞는건가요?아니면 제가 뭔가 빠트린 것이 있나요?
-
미해결Next + React Query로 SNS 서비스 만들기
Nextjs 에서의 컴포넌트 작성법
강의 진행 도중 생긴 에러는 아니고, 순수한 궁금증에 질문 남깁니다.제가 React 로 프론트엔드 개발은 항상 모든 컴포넌트를 화살표 함수로 작성했었습니다. 이를테면const Home = () => {}; export default Home; 이런식으로 작성하였는데요, 근데 상기 Nextjs 강의에서도 그렇고 다른 수많은 블로그 글들에서는 전통적인 함수 선언식을 사용하더라구요. export default function Home() {}; 그 이유가 무엇일까요? 모두가 사용하는데는 이유가 있는거 같은데 관련 자료를 찾을 수가 없어서 질문드립니다. 혹시나 강제된 문법인가 싶어 해당 강의에서 사용된 페이지들을 화살표함수로 바꿔서 작성해봤는데 똑같이 에러 없이 잘 실행이 되더군요..