묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
mutate 질문입니다!
import React, { useEffect, useState, useCallback } from 'react'; import Head from 'next/head'; import { useSelector } from 'react-redux'; import Router from 'next/router'; import { END } from 'redux-saga'; import axios from 'axios'; import useSWR from 'swr'; import AppLayout from '../components/AppLayout'; import NicknameEditForm from '../components/NicknameEditForm'; import FollowList from '../components/FollowList'; import { LOAD_MY_INFO_REQUEST } from '../reducers/user'; import wrapper from '../store/configureStore'; import { backUrl } from '../config/config'; const fetcher = (url) => axios.get(url, { withCredentials: true }).then(result => result.data); const Profile = () => { const { me } = useSelector((state) => state.user); const [followersLimit, setFollowersLimit] = useState(3); const [followingsLimit, setFollowingsLimit] = useState(3); // 팔로워, 팔로잉 불러오기 const { data: followersData, error: followerError, mutate: mutateFollower } = useSWR(`${backUrl}/user/followers?limit=${followersLimit}`, fetcher); const { data: followingsData, error: followingError, mutate: mutateFollowing } = useSWR(`${backUrl}/user/followings?limit=${followingsLimit}`, fetcher); useEffect(() => { if (!(me && me.id)) { Router.replace('/'); } }, [me && me.id]); const loadMoreFollowings = useCallback(() => { setFollowingsLimit((prev) => prev + 3); }, []); const loadMoreFollowers = useCallback(() => { setFollowersLimit((prev) => prev + 3); }, []); if (!me) { return '내 정보 로딩중...'; } // 주의: return이 hooks보다 위에 있으면 안됨 if (followerError || followingError) { console.error(followerError, followingError); return <div>팔로잉/팔로워 로딩 중 에러가 발생합니다.</div> } return ( <> <Head> <title>내 프로필 | NodeBird</title> </Head> <AppLayout> <NicknameEditForm /> <FollowList header="팔로잉" data={followingsData} onClickMore={loadMoreFollowings} loading={!followingsData && !followingError} mutateFollowing={mutateFollowing} /> <FollowList header="팔로워" data={followersData} onClickMore={loadMoreFollowers} loading={!followersData && !followerError} mutateFollower={mutateFollower} /> </AppLayout> </> ); }; export const getServerSideProps = wrapper.getServerSideProps(store => async ({ req }) => { console.log('getServerSideProps start'); const cookie = req ? req.headers.cookie : ''; axios.defaults.headers.Cookie = ''; if (req && cookie) { axios.defaults.headers.Cookie = cookie; } store.dispatch({ type: LOAD_MY_INFO_REQUEST, }); store.dispatch(END); console.log('getServerSideProps end'); await store.sagaTask.toPromise(); }); export default Profile; import React from 'react'; import propTypes from 'prop-types'; import { Button, List, Card } from 'antd'; import { StopOutlined } from '@ant-design/icons'; import { useDispatch } from 'react-redux'; import { UNFOLLOW_REQUEST, REMOVE_FOLLOWER_REQUEST } from '../reducers/user'; const FollowList = ({ header, data, onClickMore, loading, mutateFollowing, mutateFollower }) => { const dispatch = useDispatch(); const onCancel = (id) => () => { if (header === '팔로잉') { dispatch({ type: UNFOLLOW_REQUEST, data: id, }); setTimeout(() => { mutateFollowing((prev) => prev.filter((data) => data.id !== id)); }, 500); } else { dispatch({ type: REMOVE_FOLLOWER_REQUEST, data: id, }); setTimeout(() => { mutateFollower((prev) => prev.filter((data) => data.id !== id)); }, 500); } }; return ( <List style={{ marginBottom: 20 }} grid={{ gutter: 4, xs: 3, md: 4 }} size="small" header={<div>{header}</div>} loadMore={<div style={{ textAlign: 'center', margin: '10px 0' }}><Button onClick={onClickMore} loading={loading}>더 보기</Button></div>} bordered dataSource={data} renderItem={(item) => ( <List.Item style={{ marginTop: '20px' }}> <Card actions={[<StopOutlined key="stop" onClick={onCancel(item.id)} />]}> <Card.Meta description={item.nickname} /> </Card> </List.Item> )} /> ); }; FollowList.propTypes = { header: propTypes.string.isRequired, data: propTypes.array.isRequired, }; export default FollowList; 팔로잉 취소나 팔로워 삭제 시키는 버튼 클릭했을 때 dispatch 실행 이후 DB에서 삭제되기 전에 mutateFollower, mutateFollowing이 실행할 수 있어 해당 팔로잉, 팔로워 사용자 삭제했는데 화면에서 새로고침 전까지 안없어지더라구요 그래서 setTimeout을 사용했는데 다른 방법도 있을까해서 여쭤봅니다! setTimeout으로 사용하기도 하나요?
-
미해결코딩으로 학습하는 리팩토링
Area 밑줄 나온부분
double area 라고 로컬변수 선언 안되어서 밑줄 나온거에여 저렇게 하면 필드변수에 바로 값입력해서 하단에 대입이 의미 없는거죠
-
미해결iOS 개발을 위한 swift5 완벽 가이드
UI가 너무 다른것같아요;
UI가 많이 변해서 따라가기 좀 힘든부분이 있습니다;;2강 부분의 버튼을 만드는 부분을 어떻게 해야할지 감이 안와요
-
미해결
haridwar taxi services : haridwartaxiservices
haridwar taxi services :- Haridwar is a small town in the Indian state of Uttarakhand. It is situated at the confluence of the River Ganges and the River Chandrabhaga. The town is a popular destination for Hindu pilgrims who come to take a dip in the holy river and wash away their sins. Haridwar is also home to a number of temples and ashrams. Read More:- https://www.haridwartaxiservices.com/ Address: SCO - 2, Nursing Bhawan. Upper Road, Haridwar - 249401 Uttarakhand (INDIA) Email: mail@haridwartaxiservices.com | haridwartaxiservicess@gmail.com Phone: +91 9012290007
-
해결됨그림으로 쉽게 배우는 운영체제
분산운영체제
이 수업의 범위 밖이지만 감자님께 조언구합니다. 공부중 분산운영체제라는 컨셉이 와닿지 않는데요. 1. 네트워크 내 노드 (컴퓨터)들은 각자 os가 있잖아요 이것들이 뭔가 통합으로 돌아가는 가상의 os가 생기는게 분산운영체제인가요? 2. 클라이어트 서버 구조도 분산운영체제 라고 할수 있나요? 3. Tcpip, 소켓프로그래밍 이런 컨셉들도 os 커널과 관련이 있나요? 즉 os도 네트웍관련된일을 하는지요?
-
해결됨기출로 대비하는 개발자 전공면접 [CS 완전정복]
안녕하세요 강사님
강의 노션 공유 부탁드립니다
-
해결됨처음 배우는 리액트 네이티브
firebase.js파일 저장시 오류가나옵니다.
firebase.js파일을 수정하고 저장하면 이러한 오류가 나옵니다 선생님 https://github.com/Dong-Seung-hyeon/rn-Login
-
미해결처음 배우는 리액트 네이티브
오류 해결좀 해주세요ㅠ
갑자기 이런오류가 계속 나와요 선생님 https://github.com/Dong-Seung-hyeon/rn-Login
-
미해결실전! Querydsl
querydsl Repository class를 만들고 @Repository 써서 사용하면 ....
querydsl Repository class를 만들고 @Repository 써서 사용하면 web에선 동작이 되는데 Junit5 Test Code에 @Autowired로 주입하면 동작이 안되네요. 혹시 이유를 알수 있을까요? 그럼 곡 Repository class를 impl class로 두고 그걸 상속하는 Repository interface를 사용하는 방식이 OOP 관점에선 맞는 방식인 것 같긴한데 아예 동작이 안되는 이유는 모르겠네요. JUnit5 TestCode에서
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
질문이요
오류처리할떄 m-> 로시작하는데 m은 무슨의미인가요?
-
미해결코딩 입문 - 하다 보니 알게 되는 자바스크립트
숫자들이 모두 음수로만 이루어져 있다면 let 숫자 초기값을 0으로 설정하면 0이 제일 큰수가 되는 문제
숫자들이 모두 음수로만 이루어져 있다면 let 숫자 초기값을 0으로 설정하면 0이 제일 큰수가 되는 문제는 어떻게 하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
질문이요
클래스 메모리멤버리포지토리에서swequence만들떄 소문자long를 쓰는것과 대문자Long를 쓰는거의 차이가 있나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 .bat 실행시 None 화면만 뜹니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]h2 데이터베이스 설치하기 단계에서 h2설치후 콘솔을 실행하면 None 이라고 적힌 웹페이지 외에 아무것도 뜨지 않습니다. 주소창의 아이피부분을 localhost로 바꾸어도 보았고 cmd에서 실행도 해보고 했는데 해결법을 도무지 모르겠네요... 구글에 검색해도 해결채깅 나오지 않아 이곳에 질문드립니다.
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
보이기 버튼 누를 시 박스가 나오지 않습니다.
안녕하세요~ 23번 강의를 들으며 실습을 하다 잘 안되는 부분이 있어 강사님의 코드와 제 코드를 비교했는데 보이기를 눌렀을 때 박스가 나오지 않아 어느 코드에서 잘못되었는지 알고자 합니다. 어디서 잘못된 걸까요,..?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Extension Method를 통해 사용한 AddUIEvent 함수의 인자 질문
안녕하세요 강의 14분의 GetButton((int)Buttons.PointButton).gameObject.AddUIEvent(OnButtonClicked);와 관련해 문의드립니다. 해당 코드의 AddUIEvent() 함수에 인자로 들어간OnButtionClicked는 public void OnButtonClicked(PointerEventData data) { ++_score; } 형태를 갖고 있습니다. AddUIEvent() 함수는 GameObject, Action<PointerEventData>, Define.UIEvent 자료형을 인자를 받아야 합니다. 여기서 첫번째 인자는 Extension Method 기능으로, 세번째 인자는 default 값으로 처리되었습니다. 두 번째 인자로 사용된OnButtionClicked 함수의 원형을 보면 매개변수로 PointerEventData 자료형의 값을 받아야 하지만 여기서는 단순히 함수명만 적었음에도 오류가 발생하지 않습니다. 이 이유는 AddUIEvent 함수를 통해 OnPonterClick()에서 OnClickHander.Invoke(eventData)로 PointerEventData를 보내주고 있으니 알아서 처리되는 것인가요? 감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
10:09일때 if아래 { }없어도 되나요?
연달아서 적으실때 { }없어도 상관이없는것인지 궁금합니다.
-
미해결배달앱 클론코딩 [with React Native]
npm run android가 자꾸 에러가 생깁니다....
제로초님이 추천해주신 m1 mac 설정 블로그대로 진행한 다음... npm run android를 하면 자꾸 다음 같은 에러가 뜹니다."You are currently using java 1.8"이라는 문구 때문에, Android의 설정 값에서 다음같이 바꾸었는데도, 계속 에러가 뜹니다ㅠㅠ 구글링을 계속 검색해보고, 했는데도 도저히 모르겠습니다... npm run ios는 잘 됩니다.
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
설치 관련 오류 질문드립니다.(Vivado 22.1버전)
안녕하세요. 토요일 오전부터 Vivado 다운로드하기위해 끙끙거리고 있는 수강생입니다.. 본 설치 관련 내용은 Vivado 22.1 버전에서는 적용이 안되는 것일까요? 자일링스 홈페이지에서 20.2, 21.1, 21.2 버전의 파일을 구할 수 없어서, 현재 최신 버전인 22.1 버전으로 도전하였지만.. 마지막 설치창의 3번째 단계(Final Processing)에서 "Generating installed device list" 문구에서 도저히 진행이 안되어 설치시도를 포기하게 되었습니다.. (다시 50Gb 데이터를 지우고, 와이파이 되는 카페에서 5시간 다운로드를 기다려야할 생각을 하니 아찔하네요 ㅠㅠ) 실제 설치가 멈춰진 화면은 캡쳐하지 못해서, 위 사진 지푸라기 잡는 심정으로 올려보겠습니다... 도움될 내용 아신다면 조언 부탁드립니다 ㅠㅠ
-
미해결그림으로 배우는 자바, 파트2: 객체지향!
생성자
public class UpCasting { public static void main(String[] args) { // 기사 객체 생성 및 초기화 Knight knight = new Knight(); knight.name = "아서스"; knight.hp = 180; knight.strength = 50; // 도적 객체 생성 및 초기화 Thief thief = new Thief(); thief.name = "발리라"; thief.hp = 120; thief.agility = 40; // 업 캐스팅 - 부모 타입으로 객체를 해석 Adventurer adv0 = knight; Adventurer adv1 = thief; // 모험가들의 배열 생성 Adventurer[] advs = { adv0, adv1 }; // 모든 모험가의 정보 출력 for (int i = 0; i < advs.length; i++) { System.out.println(advs[i].toString()); } }}/* 1. 부모 클래스 Adventurer를 만드세요. */class Adventurer { /* 1.1 공통 필드를 선언하세요. */ String name; int hp; /* 1.2 공통 메소드를 작성하세요. */ public void punch() { System.out.printf("[%s]의 펀치!!\n", name); } public String toString() { return String.format("[%s] HP: %d", name, hp); }}/* 2. Knight를 Adventurer의 자식 클래스로 정의하세요. */class Knight extends Adventurer { /* 2.1 부모와 중복된 필드를 제거하세요. */ int strength; // 힘 /* 2.2 부모와 중복된 메소드를 제거하세요. */ public void berserker() { System.out.println("체력과 공격력이 증가합니다."); }}/* 3. Thief를 Adventurer의 자식 클래스로 정의하세요. */class Thief extends Adventurer { /* 3.1 부모와 중복된 필드를 제거하세요. */ int agility; // 민첩 /* 3.2 부모와 중복된 메소드를 제거하세요. */ public void sharpen() { System.out.println("크리티컬 확률이 증가합니다."); }}/////////////////////보통 이런식의 코드를 많이본 것 같습니다. 클래스끼리 상속을 통해 필드값을 공유하여 접근하고 수정하는 방법이요.이코드도 생성자를 따로 사용햐지 않았는데 저번에도 말씀드렸지만 굳이 변수를 하나하나 다 적어가며 생성자를 선언해야 하는 이유가 있을까요?보통 이런 방법을 더 많이 쓰지 않나해서 질문드립니다
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
IT학원(오프라인)과 부트캠프(온라인) 선택
강사님, 안녕하세요! 먼저, 비전공자들을 위해 이러한 강의를 제작해주셔서 정말 감사합니다. 저는 사정 상 내년 하반기에 퇴사가 가능할 것 같아, 재직 중 공부 방법을 알아보고 있습니다. 이 부분에 대해 조언을 얻고 싶어 문의 드립니다..! 1. 우선, 저는 프론트엔드 개발자를 희망 합니다. 2. IT학원 중 [주 3일/3시간(19시-22시)/8개월(6개월 학습+2개월 포폴)/300만원] 이 있어 등록해두었습니다. 그러나, 강사 및 커리큘럼에 사실 확신이 없습니다.. 강사님은 몇몇 국비학원을 거쳐 오신 분이시고, 커리큘럼은 아래와 같이 기초 과정으로 진행됩니다. - Html 과 CSS 구현하기 - CSS 구현하기 - Javascript basic - Query & 반응형 사이트 - Vue & node - React & Next js 3. 그러던 중 온라인 부트캠프를 발견해 고민입니다. [제로베이스(프론트엔드 스쿨)/온라인 무제한 학습/실습 프로젝트/매주 코딩 테스트/6개월/400만원] 입니다. 강사님이나 커리큘럼은 오프라인 보다 비교적 나을 것이라 생각 됩니다. 4. 퇴근 후 공부를 하려다 보니, 여러 제약이 있습니다. 강의 중 말씀 해주셨던 것 처럼, 오프라인 부트캠프에 참여하고 싶지만 현재로선 어렵습니다.. 일대일 관리에 있어서는 학원이 강점인 것 같아, 어떤 선택이 현명한건지 모르겠습니다. 주위에 개발자 지인이 없어 강사님의 의견이 큰 도움이 될 것 같습니다. 답변 주시면 정말 감사하겠습니다. :)