import React, { useEffect } from 'react';
import PostForm from '../components/PostForm';
import PostCard from '../components/PostCard';
import { useDispatch, useSelector } from 'react-redux'; //useDispatch : 리덕스 action type 실행
//useSelector : 리덕스 state 가져옴
//import user, { LOG_IN, LOG_OUT } from '../reducers/user'; //user 리듀서에서 LOG_IN 이라는 액션타입을 불러온다
import { loginAction, logoutAction } from '../reducers/user'; //2th방법)
const Home = () => { //컴포넌트가 첫번째로 렌더링 될때 액션도 dispatch가 실행된다
const dispatch = useDispatch();
useEffect(() => { //리액트 리덕스가 훅을 지원하지 않다가 추가적으로 지원하게 됨
/*
dispatch({
type: LOG_IN, //액션타입
data: {
nickname: '홍길동',
},
});
dispatch({
type: LOG_OUT, //액션타입
data: {
nickname: '홍길동',
},
}); */
//2th방법)
dispatch(loginAction); //Error: Actions must be plain objects. Use custom middleware for async actions.
//dispatch(loginAction());
dispatch(logoutAction); //useState내 setState역할
},[])
//구조분해
//const { user, isLoggedIn } = useSelector(state => state.user); //user 는 user 모듈, 리듀서의 별칭 === reducer > index.js 내 combineReducers({리듀서1, 리듀서2})
//리렌더링 성능최적화를 고려해서 세부분리시킴 => 구조분해 필요없음 {} 제거시켜야함
const user = useSelector(state => state.user.user);
const isLoggedIn = useSelector(state => state.user.isLoggedIn);
const { mainPosts } = useSelector(state => state.post); //비구조 할당 {상태값1, 상태값2} = useSelector(state => state.리듀서별칭);
//useState === useSelector
//리덕스 state를 컴포넌트내에서 사용하는 방법
//1th방법)
//{user.user ? <div> 로그인 했습니다: {user.nickname}</div> : <div>로그아웃 했습니다</div>} //user 모듈,리듀서 별칭 + user 객체
return (
<div>
{user ? <div> 로그인 했습니다: {user.nickname}</div> : <div>로그아웃 했습니다</div>}
{isLoggedIn && <PostForm />}
{mainPosts.map((c) => {
return (
<PostCard key={c} post={c} />
);
})}
</div>
);
};
export default Home;