inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

팔로우, 언팔로우 구현하기

팔로우 버튼 로딩.

331

열씨미살자!

작성한 질문수 87

0

팔로우와 언팔로우 로딩에 관련되서 질문이 있습니다.

현재 팔로우 버튼이나 언팔로우 버튼을 누르면 전체 버튼이 로딩되는 것에 대해 질문이 있습니다.

각자의 버튼이 각자의 loading을 가질려고 하면 어떻게 할 수 있을까요? 

react express redux nodejs Next.js

답변 3

0

NOAH

해결 비슷하게 하긴 했는데요. 접근법이 괜찮은지 여쭙고자 다시 한 번 여쭤봅니다.

followRequestAction을 보내면서 보내는 post.User.id를 redux의 state에 저장을 하고 클릭시 클릭되는 버튼의 id와 같으면 로딩이 되도록하니 되더라고요. 이렇게 리덕스에 넣고 하는게 괜찮은 방법인지 여쭤봅니다. 이 방법이 현영님께서 말씀하신 방법 같긴한데요.

followBtnId가 followRequest를 보내면서 id를 저장하는 state 변수입니다.

    switch (action.type) {
      case FOLLOW_REQUEST:
        draft.followLoading = true;
        draft.followDone = false;
        draft.followError = null;
        draft.followBtnId = action.data;
        break;

위와 같이 request시 id를 저장하고 

아래에서 불러와서 post.User.id와 비교하여 loading 이벤트에 넣어주었습니다.

function FollowButton({ post }) {
  const dispatch = useDispatch();
  const { mefollowLoadingunfollowLoadingfollowBtnId } = useSelector(
    (state=> state.user
  );
  const isFollowing = me?.Followings.find((v=> v.id === post.User.id);
  const isClickedBtn = post.User.id === followBtnId;

  const onClickButton = useCallback(() => {
    if (isFollowing) {
      dispatch(unfollowRequestAction(post.User.id));
    } else {
      dispatch(followRequestAction(post.User.id));
    }
  }, [isFollowing]);
  return (
    <Button
      loading={isClickedBtn && (followLoading || unfollowLoading)}
      onClick={onClickButton}
    >
      {isFollowing ? 'Unfollow' : 'Follow'}
    </Button>
  );
}

0

제로초(조현영)

네 이렇게 하시면 됩니다!

0

NOAH

일찍 일어나셨네요. 여기는 한국이랑 시간이 반대여서..ㅎ

오늘도 좋은 하루 되세요.

0

NOAH

post id도 같이 넣으셔서 컴포넌트에서 그 포스트인 경우 && 버튼 클릭 시에만 로딩창이 돌아가게 제한하는 것도 방법인 것 같습니다.

이 부분 해보려는데 잘 이해가 안되네요.. 혹시 코드 한 줄만 써주실수있을까요?

post.User.id의 경우는 어차피 PostCard마다 다 갖고있기에 별 의미가 없는거 같고 버튼 클릭시에만 그 PostCard라는걸 알 수 있어서 const click = true; 이런식으로 바꿔서 click && followRequestLoading 이런식으로 해보려했으나 click을 버튼 클릭후 어떤 부분에서 false로 초기화 시켜야 할지 잘 감이 안와서요.

간단한 문제 같은데 이거조차 헤매다니 창피하네요 ㅠㅠ..

0

제로초(조현영)

지금은 LOAD_FOLLOW_REQUEST 하나만 되어있어서 모든 버튼에 로딩창이 돌아갑니다. LOAD_FOLLOW_REQUEST에 post id도 같이 넣으셔서 컴포넌트에서 그 포스트인 경우 && 버튼 클릭 시에만 로딩창이 돌아가게 제한하는 것도 방법인 것 같습니다.

넥스트 버젼 질문

0

77

2

로그인시 401 Unauthorized 오류가 뜹니다

0

89

1

무한 스크롤 중 스크롤 튐 현상

0

175

1

특정 페이지 접근을 막고 싶을 때

0

103

2

createGlobalStyle의 위치와 영향범위

0

96

2

인라인 스타일 리렌더링 관련

0

91

2

vsc 에서 npm init 설치시 오류

0

146

2

nextjs 15버전 사용 가능할까요?

0

158

1

화면 새로고침 문의

0

121

1

RTK에서 draft, state 차이가 있나요?

0

153

2

Next 14 사용해도 될까요?

0

452

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

349

1

url 오류 질문있습니다

0

211

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

372

1

sudo certbot --nginx 에러

0

1274

2

Minified React error 콘솔에러 (hydrate)

0

469

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

247

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

327

1

npm run build 에러

0

518

1

front 서버 npm run build 중에 발생한 에러들

0

381

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

338

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

287

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

237

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

201

1