inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React로 NodeBird SNS 만들기

3-7. react-redux connect

user.nickname이 동작하지 않습니다.

163

반가우면반갑다고해

작성한 질문수 142

0

다음은  제 전체 코드인데요, 어떤거를 만져줘야할까요?..

참고로 console.log(user);하면 객체형태로 state가 잘 출력되나 console.log(user.nickname);하면 언디파인이 나오네요..

import React, { useEffect } from "react";
import PostForm from "../components/PostForm";
import PostCard from "../components/PostCard";
import { connect } from "react-redux"// 7.1.1 이상부터 사용가능 훅 사용하기위함임..
import { loginActionlogoutAction } from "../reducers/user";

// index.js는 타임라인 역할

const dummy = {
  isLoggedIn: true,
  imagePaths: [],
  mainPosts: [
    {
      User: {
        id: 1,
        nickname: "정중식"
      },
      content: "첫 번째 게시글",
      img: "https://img.hankyung.com/photo/201807/03.17342954.1.jpg"
    }
  ]
};

const Home = ({ userdispatchloginlogout }) => {
  useEffect(() => {
    login();
    logout();
    login();
    console.log(user.nickname);
  }, []);

  return (
    <div>
      {user ? (
        <div>로그인 했습니다:{user.nickname}</div>
      ) : (
        <div>로그아웃 했습니다.</div>
      )}
      {dummy.isLoggedIn && <PostForm />}
      {dummy.mainPosts.map(c => {
        return <PostCard key={c} post={c} />;
      })}
    </div>
  );
};

function mapStateToProps(state) {
  return {
    user: state.user
  };
// 리덕스 state를 리액트state로 맵핑시켜주겠다. 리덕스 state인 user가 const Home({user}) 리액트 props인 user로 연결이 됨

function mapDispatchToProps(dispatch) {
  return {
    login: () => dispatch(loginAction),
    logout: () => dispatch(logoutAction)
  };
// 액션 자체를 dispatch해서 리턴해줌

export default connect(mapStateToPropsmapDispatchToProps)(Home);

react javascript

답변 4

1

제로초(조현영)

Home의 user ? 부분에서 user는 {}라서 항상 true입니다. 리듀서부분에셔 기본값을 {}이 아니라 null로 바꾸세요.

1

제로초(조현영)

users reducer에서 LOG_IN 부분을 어떻게 구현하셨나요?

0

반가우면반갑다고해

답변 감사합니다.
다음에 질문하게되면 번거롭지않게 깃허브 주소도 같이 올릴게요! 사랑합니당.

0

반가우면반갑다고해

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

export const LOG_IN = "LOG_IN"// 액션의 이름
export const LOG_OUT = "LOG_OUT";

export const loginAction = {
  type: LOG_IN,
  data: {
    nickname: "정중식"
  }
};

export const logoutAction = {
  type: LOG_OUT
};

const reducer = (state = initialStateaction=> {
  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;
이렇게 구현했습니다.

next 10 이상에서는 redux dev tool 구동이 안되나요?

0

272

1

세션 갱신 문의 건

0

483

7

배포 진행 후 Highlight updates components render 표시

0

445

1

똑같은 기능을 하는 테이블

0

447

4

관계형

0

312

2

프론트 서버를 이용하지 않는경우

1

299

3

인피니트 스크롤링 사용시 오류

0

278

0

계속 이런에러가 떠서 해결하기는 했는데 어떤 의미인지 모르겠습니다.

0

434

2

req.user가 언제 생성되나요??

0

330

2

Cannot read property 'id' of null 에러

0

333

1

리트윗한 게시글 불러오는 sequelize

0

252

1

result.data에서 images인 이유

0

281

2

takeLatest에 대한 질문입니다.

1

342

2

프론트에서 express를 사용하지 않을때 동적라우팅

0

501

6

getInitialProps가 클라이언트에서 수행되는 이유?

0

258

1

리로드하면 팔로우 언팔로우 값이 초기화 되는 문제입니다.

0

445

2

스타일드 컴포넌트와 className을 통한 스타일 적용의 차이에 대해 궁금합니다

0

585

2

할인 쿠폰 사용이 안되는되요 (848-f9af83f183e3)

0

365

1

nodejs mvc 패턴

0

975

4

사용하고 보니, 람다 구성이 궁금합니다!

0

266

1

제로초님

0

445

1

새로고침 로그인 풀림 문제.

0

247

1

안녕하세요. 강의 너무 감사합니다

0

157

1

제로초님

0

170

1