인프런 커뮤니티 질문&답변

ts님의 프로필 이미지
ts

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

질문이있습니다.!!!

작성

·

236

0

안녕하세요 질문이 있습니다.!!(늘 감사합니다.. 질문 많이하는데...)

기본적으로 레이아웃을 제가 짤줄을 잘 모릅니다.! 사실 짜기도 싫기도 한데... 

그럼에도 불구하고 그래도 어느정도 레이아웃 구색은 짤줄은 알면 좋을 것같아서요.

현 강의 기준 마우스 휠로 레이아웃 비율을 줄이면 가로로 길게 줄어드는데

보통의 레이아웃은 마우스 휠로 줄이면 전체적으로 줄어들잖아요

제로초님 블로그도 마우스 휠로 줄이면 세로 가로로 비율에 맞게 줄어들던데

그 현 강의는 antd 요소테마만 가지고해서 가로로 길게 늘어뜨려지는건가요? 휠로 줄이면

css와 div로 레이아웃 설계를 하고 그 위?안?에 antd 테마를 넣으신건가요?

그렇다면 템플릿을 쓰는게아니면 브라우저 비율을 줄일때 전체적으로 줄어들게하려면 기본 레이아웃틀 위에 antd 테마를 넣어야 겠네용?

답변 2

0

ts님의 프로필 이미지
ts
질문자

width  px 박으니 xs{24} sm{6} md{6} 해준게 잘 안맞네용 ..ㅠㅠ 

 

다름이아니라 질문이 있습니다.

me.Posts.length, me.Followings.length, meFollwers.length 부분 

게시글 쓸때는 왼쪽 프로필에  짹짹length가 바로 변하던데 :

메인화면에서 팔로우랑 언팔로우 버튼 클릭시 

length와 버튼 name(팔로우, 언팔로우) 이 변하지 않아요.... 새로고침하면 정상적으로 변하더라구요

왜그런지 생각해봤는데 게시글 묶어줄땐 unshift 이고 

팔로우 언팔로우시에는 push 와 filter 인거 말고는 없는게 같은데 이게 문제는 아니지 않을까요? 잘 모르겠네요....

핵심은  기능은 정상적으로 작동합니다.. 단 새로고침시... 실시간으로는 버튼 name이랑 length 숫자가 안바끼네요... 보통 이벤트가 일어나면 react 특성상 리렌더링이 될텐데 말이죠...  ㅠㅠ

 

UserProfile, reducers, FollowButton  순입니다.!

return (
<Card
actions={[
<div key="twit"><Link href={`/user/${me.id}`}><a>내가쓴글<br/>{me.Posts.length}</a></Link></div>,
<div key="followings"><Link href="/profile"><a>팔로잉<br/>{me.Followings.length}</a></Link></div>,
<div key="follower"><Link href="/profile"><a>팔로워<br/>{me.Followers.length}</a></Link></div>,
]}



switch (action.type) {
case FOLLOW_REQUEST : // 팔로우 요청
draft.followLoading = true;
draft.followError = null;
draft.followDone = false;
break;
case FOLLOW_SUCCESS : //팔로우 성공
draft.followLoading = false;
draft.me.Followings.push({id: action.data.UserId}); //unshift//push
draft.followDone = true;
break;
case FOLLOW_FAILURE : //팔로우 실패
draft.followLoading = false;
draft.followError = action.error; //로그인 실패 확인
break;
case UNFOLLOW_REQUEST : //언팔로우 요청
draft.unfollowLoading = true;
draft.unfollowError = null;
draft.unfollowDone = false;
break;
case UNFOLLOW_SUCCESS : //언팔로우 성공
draft.unfollowLoading = false;
draft.unfollowDone = true;
draft.me.Followings = draft.me.Followings.filter((v) => v.id !== action.data.UserId);
break;
case UNFOLLOW_FAILURE : //언팔로우 실패
draft.unfollowLoading = false;
draft.unfollowError = action.error; //로그인 실패 확인
break;

import React, { useCallback } from 'react';
import { Button } from 'antd';
import PropTypes from 'prop-types';
import { useSelector, useDispatch } from 'react-redux';
import { FOLLOW_REQUEST, UNFOLLOW_REQUEST } from '../reduces/user';

const FollowButton = ({ post }) => {
const dispatch = useDispatch();
const { me, followLoading, unfollowLoading } = useSelector((state) => state.user);
const isFollowing = me?.Followings.find((v) => v.id === post.User.id);

// 고차함수, 클로저, 스프레드 문법

//method
const onClickButton = useCallback(() => {
if (isFollowing) {
dispatch({
type: UNFOLLOW_REQUEST,
data: post.User.id,
});
} else {
dispatch({
type: FOLLOW_REQUEST,
data: post.User.id,
});
}
}, [isFollowing]);

// console.log(JSON.stringify(isFollowing)+"확인 ");


// if (post.User.nickname === me.nickname) {
// return null;
// }

if(post.User.id === me.id) {
return null;
}

return (
<Button loading={followLoading || unfollowLoading} onClick={onClickButton}>
{isFollowing ? '언팔로우' : '팔로우'}
</Button>
);
};

FollowButton.propTypes = {
post: PropTypes.object.isRequired,
};

export default FollowButton;
 
제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

전부 redux devtools와 react devtools(Component 탭)으로 확인 할 수 있습니다. 리덕스 데이터가 제대로 바뀌고, 그게 컴포넌트에서 Hook으로 제대로 가져와지는지 확인해보세요.

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

antd에서 휠로 줄였을 때 가로로 길게 늘어지는 것 같아보이는 이유는 구역이 %로 나눠져있기 때문입니다. 휠로 줄이면 각 요소들은 작아지는데 %라는 것은 변하는 게 아니다보니 길게 늘어나는 것처럼 보이는 겁니다. 최상위 div의 width를 %가 아닌 px로 고정하면 다같이 줄어들겁니다.

ts님의 프로필 이미지
ts

작성한 질문수

질문하기