inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

React로 NodeBird SNS 만들기

제로초님 문의드립니다^^ 파라미터 있는 dispatch할 액션생성자 함수는 () 를 붙여야 되는건가요?

해결된 질문

374

manhattansky73

작성한 질문수 8

0

제로초님 ^^ 명강의 잘듣고 있습니다..

다름이 아니라요 현재 3-6장 react-redux 훅 사용하기  강의 듣고있습니다.

그런데  아래와 같은 에러가 발생해서요 

그래서 이전 제로초님 질문답변 확인한 결과 loginAction은 함수라고 하셨는데요 

아마도 파라미터가 있어서 그런거같은데요 그 질문답변에서는 파라미터를 넣으라고 하셨는데 

전그냥 () 마 붙이니깐 되더라구요

그런데 강의내용에서는 그런에러가 없이 통과된거같아서요

파라미터 있는 dispatch할 액션생성자 함수는 () 를 붙여야 되는건가요?

참고로 제 소스를 에러 아래에 첨부합니다 (강의 주석이 많아서 죄송합니다)

Error: Actions must be plain objects. Use custom middleware for async actions.

(anonymous function)
./pages/index.js:30
27 | },
28 | }); */
29 | //2th방법)
> 30 | dispatch(loginAction); //Error: Actions must be plain objects. Use custom middleware for async actions.
| ^ 31 | //dispatch(loginAction());
32 | dispatch(logoutAction); //useState내 setState역할
33 | },[])
import React, { useEffect } from 'react';
import PostForm from '../components/PostForm';
import PostCard from '../components/PostCard';
import { useDispatchuseSelector } from 'react-redux';   //useDispatch : 리덕스 action type 실행
                                                          //useSelector : 리덕스 state 가져옴

//import user, { LOG_IN, LOG_OUT } from '../reducers/user';    //user 리듀서에서 LOG_IN 이라는 액션타입을 불러온다
import { loginActionlogoutAction } 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;

javascript react

답변 2

1

제로초(조현영)

dispatch에는 객체만 들어가야 합니다. loginAction이 객체를 리턴하는 함수이니 로그인액션을 호출해야 리턴값인 함수가 dispatch에 들어가겠죠?

0

manhattansky73

늦게 확인해서 죄송합니다.  답변 정말로 감사합니다 .. ^^

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

0

269

1

세션 갱신 문의 건

0

472

7

배포 진행 후 Highlight updates components render 표시

0

443

1

똑같은 기능을 하는 테이블

0

444

4

관계형

0

309

2

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

1

292

3

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

0

275

0

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

0

428

2

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

0

325

2

Cannot read property 'id' of null 에러

0

329

1

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

0

249

1

result.data에서 images인 이유

0

276

2

takeLatest에 대한 질문입니다.

1

339

2

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

0

491

6

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

0

255

1

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

0

443

2

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

0

582

2

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

0

363

1

nodejs mvc 패턴

0

973

4

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

0

263

1

제로초님

0

439

1

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

0

242

1

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

0

152

1

제로초님

0

166

1