묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
_firebase__WEBPACK_IMPORTED_MODULE_4__.default.auth is not a function
위 애러가 나오고 해결이 되지 않습니다._firebase__WEBPACK_IMPORTED_MODULE_4__.default.auth is not a function
-
해결됨풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)
msgs.map is not a function
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import { useState, useEffect, useRef } from "react"; import { useRouter } from "next/router"; import MsgItem from "./MsgItem"; import MsgInput from "./MsgInput"; import fetcher from "../fetcher"; import useInfiniteScroll from "../hooks/useInfiniteScroll"; const MsgList = (smsgs, users) => { const { query: { userId = "" }, } = useRouter(); const [msgs, setMsgs] = useState(smsgs); const [editingId, setEditingId] = useState(null); const [hasNext, setHasNext] = useState(true); const fetchMoreEl = useRef(null); const intersecting = useInfiniteScroll(fetchMoreEl); const onCreate = async (text) => { const newMsg = await fetcher("post", "/messages", { text, userId }); if (!newMsg) throw Error("something wrong"); setMsgs((msgs) => [newMsg, ...msgs]); }; const onUpdate = async (text, id) => { const newMsg = await fetcher("put", `/messages/${id}`, { text, userId }); if (!newMsg) throw Error("something wrong"); setMsgs((msgs) => { const targetIndex = msgs.findIndex((msg) => msg.id === id); if (targetIndex < 0) return msgs; const newMsgs = [...msgs]; newMsgs.splice(targetIndex, 1, newMsg); return newMsgs; }); doneEdit(); }; const onDelete = async (id) => { const receivedId = await fetcher("delete", `/messages/${id}`, { params: { userId }, }); setMsgs((msgs) => { const targetIndex = msgs.findIndex((msg) => msg.id === receivedId + ""); if (targetIndex < 0) return msgs; const newMsgs = [...msgs]; newMsgs.splice(targetIndex, 1); return newMsg; }); }; const doneEdit = () => setEditingId(null); const getMessages = async () => { const newMsgs = await fetcher("get", "/messages", { params: { cursor: msgs[msgs.length - 1]?.id || "" }, }); if (newMsgs.length === 0) { setHasNext(false); return; } setMsgs((msgs) => [...msgs, ...newMsgs]); }; useEffect(() => { if (intersecting && hasNext) getMessages(); }, [intersecting]); return ( <> <MsgInput mutate={onCreate} /> {userId && <MsgInput mutate={onCreate} />} <ul className="messages"> {msgs.map(x => ( <MsgItem key={x.id} {...x} onUpdate={onUpdate} onDelete={() => onDelete(x.id)} startEdit={() => setEditingId(x.id)} isEditing={editingId === x.id} myId={userId} user={users[x.userId]} /> ))} </ul> <div ref={fetchMoreEl} /> </> ); }; export default MsgList; -------- 에러 error - components/MsgList.js (72:14) @ MsgList TypeError: msgs.map is not a function 이유가 뭘까요 대체...
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
npm start 오류 때문에질문남깁니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 이제까지 잘 실행되고 실습했던 리액트가 npm start를 하면 오류를 내뿜습니다. node.js를 지웠다 깔아봐도 같은 에러를 내뿜는데 혹싀 여쭤볼 수 있을까요 ㅠㅠㅠ
-
해결됨풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)
확장 프로그램
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 데이터의 값이 예쁘게 보이지 않아 질문을 올리게 되었습니다. 7 : 22에 교수님의 data는 펼쳐볼수도 있고 예쁘게 정리가 되어 있는데 저의 data는 그냥 나열만 되어 있어서 브라우저에서 보는 확장 프로그램에 대한 문제가 아닌가 라는 생각을 하게 되어서 질문을 하게 되었습니다.
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
새로고침 문의
프로필 사진 변경 후 새로고침이 자동으로 되지 않아서 직접 새로고침을 해야 변경된 사항들이 처리가 되는데 useEffect를 사용해야 하나요? 아니면 원래 자동으로 되는데 제가 처리를 못한건가요?
-
해결됨[리액트 1부] 만들고 비교하며 학습하는 리액트 (React)
객체속성 접근에 관해 질문입니다.
.map((tabType) => ({tabType, tabLabel: TabLabel[tabType]}))해당 코드에서 TabLabel[tabType] -> TabLabel.tabType 으로 변경하면 undefined 가 출력이 되는데 이유를 모르겠습니다.// const TabLabel = { [TabType.KEYWORD]: '추천 검색어', [TabType.HISTORY]: '최근 검색어'}console.log(TabLabel['KEYWORD']);console.log(TabLabel.KEYWORD);이런식으로 콘솔에 찍어보면 잘 출력이 됩니다.스코프와 관련이 있나요?
-
해결됨실전 리액트 프로그래밍
ref에 함수를 입력하는 부분에서 질문이 있습니다.
<input ref={ref => ref && setText(INITIAL_TEXT)}> 여기에서 화살표 함수를 사용해서 input이 생성될 때는 input이 함수의 매개변수에 담기게 되고 사라질 때는 null값이 넘어와서 null 값일때는 setText가 실행되지 않는다는 것은 이해했습니다. 그런데 그러면 저 함수에서 리턴값은 어떻게 되는건가요? ref = {}에서 ref에는 실질적으로 값이 담기는 것은 아닌가요? import React, { useState } from 'react'; export default function App() { const [text, setText] = useState(INITIAL_TEXT); const [showText, setShowText] = useState(true); return ( <div> {showText && ( <input type="text" ref={(ref) => { ref && setText(INITIAL_TEXT); console.log(ref); }} value={text} onChange={(e) => setText(e.target.value)} /> )} <button onClick={() => setShowText(!showText)}>보이기/가리기</button> </div> ); } const INITIAL_TEXT = '안녕하세요'; 또한 위의 코드에서 console을 찍어봤을 때 input 입력창에 키보드 입력을 하게 되면 콘솔이 두번 찍히게 되는데 이것은 어떤 이유에서 그런걸까요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
setShowCreateChannelModal props의 타입 질문
강의에서, setShowCreateChannelModal props의 타입을 (flag:boolean)=>void;라고 지정하셨는데, setState의 경우 기본적으로는 Dispatch<setStateAction<S>> 이런식이었던 것 같은데 이렇게 안쓰고 그냥 저렇게 쓸 수 있는 건가요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
https 적용 질문입니다..
안녕하세요 설치가 다른댓글처럼 404가떠서 다른 댓글에 남기신 https://www.zerocho.com/category/NodeJS/post/5ef450a5701d8a001f84baeb 이거보고 프론트,백 설치했는데요 /etc/nginx/nginx.conf 여기 안에 include /etc/nginx/sites-enabled/*; 이라는 문구가 있으면 nginx.conf말고 vim /etc/nginx/sites-enabled/default 들어가서 그대로 적으면 되는건가요? 서버가 이상한거보니까 제가 뭔가 잘못이해한거같은데 vim /etc/nginx/sites-enabled/default 여기에 그대로 적는게 아닌가요.. 첫번째사진이 처음상태고 두번째로 제가 제로초님 블로그 보고 바꾼상태입니다. sudo service nginx start를 하고 status 는 이상태입니다,, 프론트는 위같은 에러가뜨면서 헤더만뜨고 아무것도안뜨고 백서버는 sudo service nginx start이거하면 아무 말 없이 실행되고 welcome to nginx 인데 백도 지금 잘못된상태인가요? 배포까지는 여태까지 뜨는 에러들 진짜 몇일동안 혼자 다 해결했는데 https적용 이거는 뭐가문제인지를 모르겠어서 질문합니다..
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
aws 빌드 메모리부족 질문입니다.
안녕하세요 빌드시 메모리 부족으로 계속 빌드가 멈추는데요 구글링해서 옵션도 다 붙여보고 해도 똑같네요,, 질문글들을 보니까 .next를 서버에 전송하여 실행하라는 답글을 봤습니다. 이부분이 잘 이해가 안가서요. 혹시 .next폴더는 용량이 크니까 커밋푸시로는 안올라가니까 lfs를 사용해서? 깃헙에 올려하는것 같던데 이런식으로 올리고 ubuntu에서 그냥 git clone하라는 말씀 맞나요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
GET .../members error
이전에 비슷한 문제를 겪은 글이 있었는데 해결되지 않아서 글을 작성하게 되었습니다. InviteChannelModal 컴포넌트에서 보내는 GET 요청 const { revalidate: revalidateMembers } = useSWR( userData ? `/api/workspaces/${workspace}/channels/${channel}/members` : null, fetcher, ); 위 코드의 실행되는 결과로 다음과 같은 에러가 발생합니다. const { workspace, channel } = useParams(); InviteChannelModal 컴포넌트에서 콘솔에 workspace와 channel을 찍어보니 channel이 undefined 값으로 나오는데 useParams를 사용하면 현재 URL에서 라우터에서 지정한 콜론 뒤의 키에 해당하는 값을 반환하는 것으로 알고 있습니다. 로그인 후 "http://localhost:3090/workspace/sleact/channel/일반" 주소로 이동하기에 channel 값이 일반으로 출력되기를 예상합니다만.. Workspace layouts 에서 라우터 설정을 했음에도 매칭되는 channel 값을 받아오지 못하기에 원인을 알 수 없어 여쭤봅니다. <Switch> <Route path="/workspace/:workspace/channel/:channel" component={Channel} /> <Route path="/workspace/:workspace/dm/:id" component={DirectMessage} /> </Switch>
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
인피니트 스크롤 질문 있습니다.
안녕하세요 인피니트 스크롤 적용 중 이상한 점이 하나 있어서 질문드립니다. f12누르고 개발자 모드 킨 상태로 redux 툴로 action을 체크하는 상태에서 스크롤을 맨 밑으로 내리면 제로초님처럼 LOAD_POSTS_REQUEST를 보내고 SUCCESS까지 동작하는데 문제는 스크롤이 계속 맨 밑에 머물러서 REQUEST SUCCESS를 계속 반복합니다. 즉 한번 맨 밑으로가면 스크롤이 다시 올라오지 않고 그 상태에서 REQUEST, SUCCESS를 5번 반복합니다. 그런데 개발자모드를 키지않고 테스트하면 제로초님처럼 정상작동합니다. 이거는 별 문제가 아닌건가요? (코드도 깃허브참고해서 똑같이 했습니다.)
-
해결됨풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)
TypeError: Cannot read property 'nickname' of undefined
저도 똑같은 에러가 발생하여 MsgItem이나 MsgList 전부 깃허브에 올려주신 코드 그대로 복붙도 해보았는데, 그래도 안됩니다. MacOS 사용중입니다. 왜 안되는지 모르겠습니다..
-
미해결이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)
useEffect의 deps에 함수가 들어가는 의미, 그리고 뒷정리 함수에 대한 질문
안녕하세요,강의가 저에게 많은 도움이 되고 있습니다😄 강의를 수강하는 도중 몇가지 궁금한 것이 있어 질문 드립니다. 1. useEffect에 변수값(useState 포함)이 들어가는 것으로 알고 있었는데,함수가 들어가는 것은 어떤 의미인지 궁금합니다.함수가 변경될때마다 useEffect가 실행된다라는 뜻인 것 같은데,함수가 변경된다는 뜻은 무엇일까요?(deps에 들어가는 함수의 인자들이 변경된다는 뜻은 아닌 것 같아서요...) 2. 뒷정리 함수를 사용하는 이유를 확실하게 알고 싶습니다.현재 사용된 뒷정리 함수를 return (뒷정리함수) 에 두지 않고,그냥 useEffect의 이펙트 부분에 함수를 실행하면 안되는 것인가요? 제 생각에서는 그냥 본 이펙트를 실행하기 직전에observer.disconnect() 를 실행시켜도 비슷한 결과를 가져오지 않을까라는 막연한 생각이 들어서요. 그래서 윗 부분의 두가지 궁금증을 해결하고자 질문을 남깁니다. 감사합니다.
-
해결됨따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
안녕하세요 수업 중에 막히는 부분이 있어서 질문 남겨요
자꾸 이런 오류가 떠서 수업 진행이 안되서 남깁니다. 확인하려 firebase.auth()를 콘솔로 찍어보니 이런 오류가 또 뜨더라고요... auth를 import 제대로 했고, 노드 모듈을 삭제하고 다시 실행해보라는 말도 있어서 해봤는데 똑같네요ㅠㅠ 구글링을 해도 별 소득이 없네요... 질 좋은 수업 열심히 듣고 있습니다!! 바쁘시지만 답변해주시면 더 열심히 하겠습니다!!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
게시글 작성을 안해도 이미지가 서버에 저장되는건가요?
사진 업로드만 해도 서버에 저장하는거면 사용자가 파일 업로드를 하고 막상 게시글 작성을 취소하거나 오류로 인해 작성 실패하더라도 이미지 데이터는 다 서버에 저장되는건가요??
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
빌드 에러 질문입니다.
npm run build하면 이런 에러가뜨는데 도통ㅇ 머가문젠지 모르겠습니다..ㅠㅠ stringify 를 쓰면 나는 에러같은데 저는 안쓰고있는데 이러네요..
-
해결됨풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)
onupdate 매개변수
onupdate 함수의 매개변수를 (id, text) 로 넣어주었더니! 수정 버튼을 클릭 했을 때 내용이 바뀌지 않더라구요 그래서 혹시나해서 매개변수를 (text, id) 로 변경했더니 수정 기능이 제대로 작동 했습니다. 매개변수 순서가 바뀌면 문제가 있는걸까요??
-
미해결따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]
질문드립니다
안녕하세요. 우선 강의 너무 잘 듣고 있습니다. password.current = watch("Password"); 강의를 통해 위 방법을 익히기 전엔 혼자서 onChange를 통해 ref.current값을 바꾸려고 시도하였는데요 input에 onChange를 걸어줘도 Change이벤트가 작동을 안하더라구요.. react hook form 공식 문서를 뒤져봐도 위 방법으로만 사용하라는 말은 따로 없고 태그에 onChange이벤트를 사용하는 예제도 있는데 왜 이러는걸까요?? 단순히 버그인지 뭐가 잘못된건지 모르겠습니다 ㅜㅜ
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
안녕하세요 궁금한점이요!!
안녕하세요 저는 웹팩 소스는 복붙하고 패키지를 직접 하나씩 설치해보았는데 빌드나 실행시 에러가 나서 webpack-dev-server 가 4.0.0 인걸 지우고 @ 3.11.2로 다시설치하니까 되더라고요. 원래 이렇게 버전하나때문에 에러가 잘 발생하나요? 그리고 setting/ts 그대로 빌드해보면 저는 이건 에러는 아니고 경고지만 이런 세가지 경고 들이 뜨는데 원래 이런건가요?? 상관없는건가요?