이제 컨테이너 컴포넌트를 만들어 봅시다. src 디렉터리에 containers 디렉터리를 만든 후 다양한 컨테이너 컴포넌트들을 종류별로 분류하여 만들어 보겠습니다.
앞으로 만들 컨테이너 컴포넌트에서는 useDispatch와 useSelector 함수를 사용하여 컴포넌트를 리덕스와 연동시킵니다. 앞으로 이 프로젝트에서 작성할 모든 컨테이너 컴포넌트는 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;