이제 컨테이너 컴포넌트를 만들어 봅시다. src 디렉터리에 containers 디렉터리를 만든 후 다양한 컨테이너 컴포넌트들을 종류별로 분류하여 만들어 보겠습니다.

    앞으로 만들 컨테이너 컴포넌트에서는 useDispatchuseSelector 함수를 사용하여 컴포넌트를 리덕스와 연동시킵니다. 앞으로 이 프로젝트에서 작성할 모든 컨테이너 컴포넌트는 connect 함수 대신 Hooks를 사용하여 구현할 것입니다.

    containers/auth/LoginForm.js

    import React, { useEffect } from 'react';
    import { useDispatch, useSelector } from 'react-redux';
    import { changeField, initializeForm } from '../../modules/auth';
    import AuthForm from '../../components/auth/AuthForm';
    
    const LoginForm = () => {
      const dispatch = useDispatch();
      const { form } = useSelector(({ auth }) => ({
        form: auth.login
      }));
      // 인풋 변경 이벤트 핸들러
      const onChange = e => {
        const { value, name } = e.target;
        dispatch(
          changeField({
            form: 'login',
            key: name,
            value
          })
        );
      };
    
      // 폼 등록 이벤트 핸들러
      const onSubmit = e => {
        e.preventDefault();
        // 구현 예정
      };
    
      // 컴포넌트가 처음 렌더링될 때 form을 초기화함
      useEffect(() => {
        dispatch(initializeForm('login'));
      }, [dispatch]);
    
      return (
        <AuthForm
          type="login"
          form={form}
          onChange={onChange}
          onSubmit={onSubmit}
        />
      );
    };
    
    export default LoginForm;

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.