강의

멘토링

커뮤니티

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

hib4888님의 프로필 이미지
hib4888

작성한 질문수

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

리듀서 쪼개기

action이 실행되지 않는 문제 질문드려요

해결된 질문

작성

·

315

0

이전에는 잘됬었는데 ant-design의 Menu레이아웃을 변경한 뒤로부터 로그아웃 액션이 실행되지 않아서 질문드립니다.

 

콘솔을 확인해보니 기존의 key값이 undefined로 나와서 전달이 안되는것같은데 어떤 방법으로 해결할 수 있는지 궁금합니다.

 

import React, { useCallback } from 'react';
import { Menu } from 'antd';
import { UserOutlined, HomeOutlined, LogoutOutlined, DownOutlined } from '@ant-design/icons';
import Link from 'next/link';
import { useDispatch } from 'react-redux';

import { logoutAction } from '../reducers/user';

const LoggedinHeader = () => {
  const dispatch = useDispatch();
  const onLogout = useCallback((e) => {    
    console.log(e);
    if (e.key === 'logout') {
      dispatch(logoutAction());
    }
  }, []);

  return (    
    <MenuWrapper mode='horizontal' onClick={onLogout}>
      <MainMenuWrapper>
        <Menu.Item key='home' icon={<HomeIconWrapper />} ><Link href="/"><a>Home</a></Link></Menu.Item>                   
        <Menu.Item key='myPage' icon={<UserIconWrapper />} ><Link href="/mypage"><a>My Page</a></Link></Menu.Item>                  
        <Menu.Item key='logout' icon={<LogoutIconWrapper />} >Logout</Menu.Item>        
      </MainMenuWrapper>        

      <UserMenuWrapper>
        <UserNameWrapper key='user-name'>User Name</UserNameWrapper>        
        <Menu.SubMenu key="news" icon={<DownOutlined />}>
          <Menu.Item key="like-comment-alert">
            좋아요 알람, 댓글 알람
          </Menu.Item>
        </Menu.SubMenu>        
      </UserMenuWrapper>
    </MenuWrapper>                  
  )
};

export default LoggedinHeader;

 

export const initialState = {
  isLoggedIn: false,
  user: null,
  signUpData: {},
  loginData: {},
};

export const loginAction = (data) => {
  return {
    type: 'LOG_IN',
    data
  }
};

export const logoutAction = () => {
  return {
    type: 'LOG_OUT',    
  }
};

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case 'LOG_IN':
      return {        
        ...state,
        isLoggedIn: true,
        user: action.data,
      };
    case 'LOG_OUT':
      return {        
        ...state,
        isLoggedIn: false,
        user: null,
      };
    default:
      return state;
  }
};

export default reducer;

 

답변 1

0

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

그냥 Menu.Item에다가 onClick을 붙일 수는 없나요?

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

Menu.Item, Menu.Item의 아이콘속성태그, 메뉴아이템을 감싸고있는 태그...등등 모든 태그에 

onClick를 설정해봤는데도 적용이 안되서 질문드렸습니다 ㅜㅜ

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

아이템에 온클릭 붙일때는 if e.key는 빼셨죠??

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

말씀해주신  if e.key를 제거하고 menu.item에 onClick을 추가하니까 해결되었습니다

바쁘신데 답변 정말 감사합니다. 

 

 

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

근데 로그아웃을 할때 이번트 key값이 아래와 같이 undefined가 나오는데 이유를 알 수 있을까요?

이전에는 메뉴아이템을 클릭할때마다 각각의 key값들이 콘솔로 출력됬습니다

hib4888님의 프로필 이미지
hib4888

작성한 질문수

질문하기