묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
event.dataTransfer.items의 타입이 무엇인가요?
MDN의 가이드에 따라 DragNDrop 코드를 작성하는데파일을 가져오기 위한 코드인 event.dataTransfer.items 에서 아래와 같은 오류가 발생햇습니다.'DataTransferItemList' 형식은 배열 형식이 아닙니다.ts(2461)MDN DataTransfer: items 속성 가이드에서는 목록을 반환하고 항목이없어도 빈목록을 반환한다고 되어있고MDN DataTransferItemList 타입 가이드에서 객체라고 명시되어 있던데 개별항목에는 [ ]표기법으로 접근할수 있다는걸로 보아 event.dataTransfer.items의 타입은 리스트가 아닌 오브젝트에 숫자를 KEY로 값을 넣어놓은 형태인가요?? 아님 또다른 타입인건가요?코드 function dropHandler(ev: React.DragEvent<HTMLDivElement>): void { console.log('File(s) dropped'); // Prevent default behavior (Prevent file from being opened) ev.preventDefault(); if (ev.dataTransfer.items) { // Use DataTransferItemList interface to access the file(s) [...ev.dataTransfer.items].forEach((item, i) => { // If dropped items aren't files, reject them if (item.kind === 'file') { const file = item.getAsFile(); if (file) { console.log(`… file[${i}].name = ${file.name}`); } } }); } else { // Use DataTransfer interface to access the file(s) const files = ev.dataTransfer.files; [...files].forEach((file, i) => { console.log(`… file[${i}].name = ${file.name}`); }); } }MDN DragNDrop가이드https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/File_drag_and_dropMDN DataTransfer: items 속성 가이드https://developer.mozilla.org/ko/docs/Web/API/DataTransfer/itemsMDN DataTransferItemList 타입 가이드https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItemList
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
더티 에러
최종 실행에서 다음과 같은 에러가 뜨네요. 해결방법이 어떻게 될까요?
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
infinite scroll에서 최초 랜더링한 페이지가 한페이지에 안나올때 추가로 페이지를 불러 올수 있나요?
만약 Page의 단위를 5로 잡아서 최초 랜더링한 페이지가 스크롤이 되지않는다면 onScroll 이벤트가 발생하지 않으니 setSize 이벤트도 발생할수 없습니다.이렇게 최초 데이터의 개수가 모자라서 이벤트 자체가 발생하지 않으면 별개의 이벤트로 scroll이 가능할때까지 페이지를 불러와야 하는데 좋은 방법이 잇는가요?페이지를 5개로 잡을떄페이지를 20개로 잡을떄참조 코드import ChatBox from '@components/ChatBox'; import ChatList from '@components/ChatList'; import useInput from '@hooks/useInput'; import { Header, Container } from '@pages/DirectMessage/styles'; import fetcher from '@utils/fetcher'; import makeSection from '@utils/makeSection'; import axios from 'axios'; import gravatar from 'gravatar'; import React, { FC, FormEventHandler, useCallback, useEffect, useRef, useState } from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; import { useParams } from 'react-router'; import useSWR from 'swr'; import useSWRInfinite from 'swr/infinite'; const PAGE_SIZE = 5; const DirectMessage: FC = () => { const { workspace, id } = useParams(); const { data: myData } = useSWR<IUser, false>('/api/users', fetcher); const { data: userData } = useSWR<IUser, false>(`/api/workspaces/${workspace}/users/${id}`, fetcher); const [chat, onChangeChat, setChat] = useInput(''); // const scrollbarRef = useRef(null); const { data: chatData, mutate: mutateChat, setSize, } = useSWRInfinite<IDM[]>( (index) => `/api/workspaces/${workspace}/dms/${id}/chats?perPage=${PAGE_SIZE}&page=${index + 1}`, fetcher, ); const isEmpty = chatData?.[0]?.length === 0; const isReachingEnd = isEmpty || (chatData && chatData[chatData.length - 1]?.length < PAGE_SIZE); const chatSection = makeSection(chatData ? [...chatData].flat().reverse() : []); const onSubmitForm = useCallback<FormEventHandler>( (event) => { event.preventDefault(); if (!chat || !chat?.trim()) { return; } axios .post(`/api/workspaces/${workspace}/dms/${id}/chats`, { content: chat, }) .then(() => { mutateChat(); setChat(''); }) .catch(console.error); console.log('제출'); }, [chat, id, mutateChat, setChat, workspace], ); const scrollbarRef = useRef<Scrollbars>(null); return !userData || !myData || !chatData ? null : ( <Container> <Header> <img src={gravatar.url(userData.email, { s: '24px', d: 'retro' })} alt={userData.nickname} /> <span>{userData.nickname}</span> </Header> <ChatList chatSections={chatSection} isEmpty={isEmpty} isReachingEnd={isReachingEnd} setSize={setSize} ref={scrollbarRef} /> <ChatBox onSubmitForm={onSubmitForm} chat={chat} onChangeChat={onChangeChat} placeholder={`Message ${userData.nickname}`} otherData={[userData]} /> </Container> ); }; export default DirectMessage;import Chat from '@components/Chat'; import { ChatZone, Section, StickyHeader } from '@components/ChatList/styles'; import React, { FC, MutableRefObject, forwardRef, useCallback } from 'react'; import { Scrollbars, positionValues } from 'react-custom-scrollbars-2'; interface Props { chatSections: { [key: string]: (IDM | IChat)[] }; isEmpty: boolean; isReachingEnd?: boolean; setSize: (f: (size: number) => number) => Promise<(IDM | IChat)[][] | undefined>; } const ChatList = forwardRef<Scrollbars, Props>(({ chatSections, isReachingEnd, isEmpty, setSize }, scrollRef) => { const onScroll = useCallback( (values: positionValues) => { if (values.scrollTop === 0 && !isReachingEnd) { setSize((size) => size + 1).then(() => { const current = (scrollRef as MutableRefObject<Scrollbars>)?.current; if (current) { current.scrollTop(current.getScrollHeight() - values.scrollHeight); } }); } }, [isReachingEnd, scrollRef, setSize], ); return ( <ChatZone> <Scrollbars autoHide ref={scrollRef} onScrollFrame={onScroll}> {Object.entries(chatSections).map(([dateData, chatData]) => ( <Section className={`section-${dateData}`} key={dateData}> <StickyHeader> <button>{dateData}</button> </StickyHeader> {chatData.map((chat) => ( <Chat key={chat.id} data={chat} /> ))} </Section> ))} </Scrollbars> </ChatZone> ); }); export default ChatList;
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
concat시 2차원 배열이면 쪼개지지않나요?
원본값을 유지하기위해 concat을 사용하셧는데지금 같은 1차원 배열일때는 문제가 없지만 2차원 배열일 경우 해당 배열이 다쪼개져서 1차원 배열이 되는걸로 알고있습니다 그래서 저는 원본을 유지할때 스프레드 문법을 사용하는데 concat이 더 좋은경우도 있나요?두가지 방법을 다 알려주시긴 하셧는데 차이점이 잇는가 궁금합니다.예시상황const chatData = [[1, 2], [3, 4], [5, 6]];[].concat(...chatData).reverse() => [6, 5, 4, 3, 2, 1][...chatData].reverse()=> [[5, 6], [3, 4], [1, 2]]
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
react-custom-scrollbars 를 최상위 컴포넌트에 적용하면 시스템 스크롤바가 안생길까요?
기존 윈도우 스크롤바의 경우 스크롤바가 width를 잡아먹어 의도햇던 디자인이 찌그러 지는경우가 있어서 고민이엿습니다.이번 강의에서 알려주신 react-custom-scrollbars 의경우 width를 잡아먹지 않고 내부에 생성되는걸로 확인되는데vw,vh를 100%로 잡은 최상위 레이아웃을 만들고 react-custom-scrollbars 를 추가한뒤 그 자식으로 기존 코드들을 옮기려 합니다.이때 문제가 될만한 이슈 또는 더 나은 방법이 잇을까요?
-
해결됨하울의 안드로이드 인스타그램 클론 만들기
게시물이 뜨지 않습니다.(detail_veiw)
안녕하세요게시물 업로드하기 부분을 기반으로 fragment 명 정도만 살짝씩 수정하며 따라하다가 오류가 생겨 문의 남깁니다. 정확히는 코드 자체에 오류는 없는데 홈화면에 게시물이 뜨지 않습니다. 파이어베이스에 데이터들이 업로드 되어 있는 것을 확인하였습니다.xml id등도 동일하고요 코드 자체를 잘못 타이핑했는지, 혹은 안드로이드 스튜디오 등의 업데이트가 진행되면서 오류가 생긴 건지 궁금합니다. -xml view id를 인식하지 못해 findViewByID로 인식하도록 코드를 수정했습니다.package com.example.guru26 import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.firebase.firestore.FirebaseFirestore import java.util.* import com.bumptech.glide.Glide class HomeFragment : Fragment() { var firestore : FirebaseFirestore? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment var view = LayoutInflater.from(activity).inflate(R.layout.fragment_home, container, false) firestore = FirebaseFirestore.getInstance() view.findViewById<RecyclerView>(R.id.rv_poster).adapter = PosterAdapter() view.findViewById<RecyclerView>(R.id.rv_poster).layoutManager = LinearLayoutManager(activity) return view } inner class PosterAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() { var contentDTOs : ArrayList<ContentDTO > = arrayListOf() private var contentUidList :ArrayList<String> = arrayListOf() init { firestore?.collection("images")?.orderBy("timestamp")?.addSnapshotListener { querySnapshot, FirebaseFirestoreException -> contentDTOs.clear() contentUidList.clear() for(snapshot in querySnapshot!!.documents){ var item = snapshot. toObject(ContentDTO::class.java) contentDTOs.add(item!!) contentUidList.add(snapshot.id) } notifyDataSetChanged() } } override fun onCreateViewHolder(p0: ViewGroup, p1: Int): RecyclerView.ViewHolder { val view = LayoutInflater.from(p0.context).inflate(R.layout.list_item, p0, false) return CustomViewHolder(view) } inner class CustomViewHolder (view : View) : RecyclerView.ViewHolder(view){} override fun getItemCount(): Int { return contentDTOs.size } override fun onBindViewHolder(p0: RecyclerView.ViewHolder, p1: Int) { var viewholder = (p0 as CustomViewHolder).itemView //UserID viewholder.findViewById<TextView>(R.id.tv_name).text= contentDTOs!![p1].exhName viewholder.findViewById<TextView>(R.id.tv_start_date).text= contentDTOs!![p1].exhStartDay viewholder.findViewById<TextView>(R.id.tv_end_date).text= contentDTOs!![p1].exhEndDay viewholder.findViewById<TextView>(R.id.tv_place).text= contentDTOs!![p1].exhPlace //Image Glide.with(p0.itemView.context).load(contentDTOs!![p1].imageUrl).into(viewholder.findViewById(R.id.iv_poster)) } } }
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
캘린더 기능 중에 질문이 있어요.
캘린더 만들기 강의를 따라하는 중에 eventLoader 기능도 넣어보고 싶은데알려주신 db에서 이벤트를 불러와 events map에 넣고eventloader에서 리스트로 불러오면 되는 것 같은데요.제가 구현해 봤을 땐 이벤트 추가를 하고 꼭 화면을 한번 터치해야 marker가 표시되고이벤트를 삭제해도 앱을 재실행하지않으면 marker가 사라지지 않더라고요. 해결방법을 찾지 못해 질문드립니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
캘린더에 요일부분이 짤림이 있어요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUM캘린더 요일부분에 잘림이있는데, 어떻게 해결해야할까요?코드는 색깔만 빼고 강의와 동일한데 라이브러리 자체의 문제인지 뭔지 모르겠네요ㅜㅜ
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
brew install cocoapods 오류
brew install cocoapods 를 실행하게 되면 해당 오류가 발생하는데 이유를 모르겠어서 질문 드려요
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
섹션 19 영상통화 NOW 4.x.x에서 오류 문의
영상통화 강의 따라하다가 다음과 같은 에러가 발생하였는데 어떻게 수정해야 하는지 모르겠어 문의드립니다.Running Gradle task 'assembleDebug'...lib/screen/cam_screen.dart:57:50: Error: Too many positional arguments: 0 allowed, but 1 found.Try removing the extra positional arguments. RtcEngineContext context = RtcEngineContext(APP_ID);
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
ComponentPropsWithoutRef 와 FC<PropsWithChildren<Props>> 의 차이점이 무엇인가요
저는 평소에 아래와 같이 ComponentPropsWithoutRef을 이용하여 children이나 스타일등을 props로 내려받아 사용하고 있엇는데 export interface Props { /** 북마크 여부 */ isBookmark: boolean; /** 클릭했을 때 호출할 함수 */ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void; } export const Bookmark = (Props: Props & ComponentPropsWithoutRef<"button">) => { return ( <ButtonStyle {...Props}> <BookmarkIcon isBookmark={Props.isBookmark} /> </ButtonStyle> ); }; export default Bookmark; 강의에서는 아래와같이 FC<PropsWithChildren<Props>> 형식으로 받아 오던데 둘이 어떤 차이가 있을까요?interface Props { show: boolean; onCloseModal: () => void; style: CSSProperties; closeButton?: boolean; } const Menu: FC<PropsWithChildren<Props>> = ({ closeButton, style, show, children, onCloseModal }) => { const stopPropagation = useCallback<MouseEventHandler<HTMLDivElement>>((event) => { event.stopPropagation(); }, []); if (!show) { return null; } return ( <CreateMenu onClick={onCloseModal}> <div onClick={stopPropagation} style={style}> {closeButton && <CloseModalButton onClick={onCloseModal}>×</CloseModalButton>} {children} </div> </CreateMenu> ); };
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
안녕하세요 혹시 이런 레이아웃은 어떻게 만들수있을까요?
안녕하세요! 영상 강의를 보면서 stack 관련해서 배웠는데 혹시 이런 부분도 stack을 통해 구현해야하는 걸까요?위 레이아웃과 아래 레이아웃에 겹쳐서 박스가 있는 형태 입니다!
-
해결됨따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
Property ' ' has no initializer and is not definitely assigned in the constructor ts 문제해결 방법 문의
안녕하세요 강사님클로코딩 진행중 npm run dev 명령 시 정상적으로 런타임 되는데계속해서 아래 사진과 같이 각 entity가 초기화가 안됐다는 경고 창이 뜨는데 이건 어떻게 해결해야하는지 문의드립니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
랜덤숫자 생성기 에서 while ( ) { } 문 에러관련 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 이상없이 실행은 되는데 에러가 발생하는 이유가 궁금합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Basic Video Call 사이트에 오늘 문제가 있나요?
지금까지 잘 되다가, 갑자기 좀 전 부터 화면이 뜨지 않습니다. 혹시 무슨일인지 아실까요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
페이지 접속시 다수 렌더링 이슈(slack환경으로 새 프로젝트 구축)
슬랙 프로젝트의 환경설정(웹팩 등)을 토대로 새 프로젝트를 만들고 있습니다.페이지 접속시 console.log를 찍어보니 3번 찍히는 문제가 있습니다.원인 및 해결방법을 모르겠어서 질문드립니다. 아래는 라우터 쪽입니다.login과 signup은 loadble을 사용해서 그런지 1번만 console.log가 찍혔습니다.아래 stockrecode에 해당하는 페이지가 3번 console.log 찍힙니다. 아래는 stockrecode 컴포넌트에 있는 코드입니다. 나머지는 다 주석처리하였습니다.아래는 로 이동시에 표시된 내용입니다. useSwr 사용 부분을 지우면 2번 표시됩니다.<해본 방법>strict-mode를 지우면 되는 글을 보아서 찾아봤는데이미 strict-mode가 없는 상태였습니다. 2.웹팩에서 strict-mode를 false로 하면 되는 글을 보고 해보았는데(관련 링크 https://www.sobyte.net/post/2021-09/webpack-strip-use-strict/)아래처럼 @babel/plugin-transform-modules-commonjs 설치를 하고 적용해보았는데도아래처럼 에러가 생겨서 이 방법으로도 해결하지 못하였습니다 답변주시는데 더 필요한 정보가 있으시면 말씀부탁드립니다.꼭 해결하고 싶은데 제자리만 멤도는거 같아 질문 올립니다. ㅠ
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Token 생성하는 ui가 변경되었습니다.
토큰을 생성하는 방식이 변경되었습니다.강의의 내용과 ui가 달라서 조금 헤맸습니다.configuration page 들어가서 Primary Certificate를 enable하고 그 아래 No Certificate를 delete (이메일을 입력필요)합니다.그 후 아래 Features에 Temp token for audio/video call의Generate temp RTC token링크를 타고 들어가면 같은 과정이 나옵니다!한번 확인 부탁드립니다!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
next.js 설치를 하였는데 디렉토리 구조가 다릅니다.
안녕하세요강의 영상 잘 보고 있습니다.next.js 설치를 강의영상과 동일하게 명령어로 설치하는데 디렉토리 구조가 영상과 달라서 문의드립니다.별것 아닌 문제긴 한데 pages 폴더가 제쪽에는 설치가되지 않아서 경로설정등의 소소한 차이가 생겨서 문의드립니다.감사합니다
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
npm run dev시 password 다르다고 나옴
에러 종류: 위와 같은 환경에서 error: password authentication failed for user "postgres" 로 추정되는 에러 발생아마 서버 연결시 인증 문제로 보입니다.작동 절차: docker-compose up 입력,server 파일로 이동, npm run dev 실행. 에러 발생+1)POSTGRES_HOST_AUTH_METHOD: trust로 설정하고 서버 새로 만들어도 동일한 에러가 발생하여 무슨 문제일지 잘 모르겠네요.. 도움 주시면 감사하겠습니다.+2) 아래에 터미널의 전체 에러 코드 남깁니다.C:\Users\tukim\Desktop\reddit-clone-app\server>npm run dev > server@1.0.0 dev> nodemon --exec ts-node ./src/server.ts[nodemon] 3.0.1[nodemon] to restart at any time, enter rs[nodemon] watching path(s): .[nodemon] watching extensions: ts,json[nodemon] starting ts-node ./src/server.tsserver running at https://localhost:4000error: ����� "postgres"�� password ������ �����߽��ϴ� at Parser.parseErrorMessage (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\parser.ts:369:69) at Parser.handlePacket (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\parser.ts:188:21) at Parser.parse (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\parser.ts:103:30) at Socket.<anonymous> (C:\Users\tukim\Desktop\reddit-clone-app\server\node_modules\pg-protocol\src\index.ts:7:48) at Socket.emit (node:events:513:28) at Socket.emit (node:domain:489:12) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) at Socket.Readable.push (node:internal/streams/readable:234:10) at TCP.onStreamRead (node:internal/stream_base_commons:190:23) { length: 107, severity: 'ġ��������', code: '28P01', detail: undefined, hint: undefined, position: undefined, internalPosition: undefined, internalQuery: undefined, where: undefined, schema: undefined, table: undefined, column: undefined, dataType: undefined, constraint: undefined, file: 'auth.c', line: '329', routine: 'auth_failed'}
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
cmd에서 flutter 명령어가 안먹습니다..
강의 잘따라가다가 오랜만에 같은 환경에서 다시 개발하려 환경을 체크해보니 오류가 발생해서 문의 남깁니다..우선 cmd에서 flutter 명령어를 치면 cmd창이 강제로 종료됩니다.powershell, cmd, android 터미널 전부 Unable to find got in your PATH. 가 발생합니다.git 터미널에선 flutter 명령어가 정상적으로 작동 환경변수 다 체크하고 관련 오류를 다 찾아보았는데 해결이 안되네요.. ㅠ