2023.03.02.(목)
TIL Today I Learned
해당 깃허브
Good: 리코일을 계속 공부했다. 처음부터 리코일 틀을 잡고 했다면 두 번 일을 안 했을텐데 아쉬웠다.
Bad: 리코일이 어렵기 보다는 머리가 복잡했다. 처음부터 시작하는 것이 아닌 이미 구현이 된 것을 퍼즐 조각처럼 맞추는 느낌이었다.
//ModalAuth 전
return (
<ModalStyled onClick={closeLoginModal}>
{forgotModal ? (
<AuthForgot forgotModalButton={forgotModalButton} />
) : signUpModal ? (
<AuthSignUp
changeModalButton={changeModalButton}
closeLoginModal={closeLoginModal}
/>
) : (
<Auth
closeLoginModal={closeLoginModal}
forgotModalButton={forgotModalButton}
changeModalButton={changeModalButton}
/>
)}
</ModalStyled>
);
//ModalAuth 후
불필요하여 삭제
//Auth 전
interface Props {
closeLoginModal: () => void;
changeModalButton: () => void;
forgotModalButton: () => void;
}
return(
<PwForgotContainer onClick={props.forgotModalButton}>
<LoginCheckSignDiv>아이디/패스워드를 잊으셨나요?</LoginCheckSignDiv>
</PwForgotContainer>
<LoginGoogleContainer>
<AuthSocial closeModal={props.closeLoginModal} />
</LoginGoogleContainer>
<LoginCheckContainer onClick={props.changeModalButton}>
<LoginCheckSignDiv>회원가입 하기</LoginCheckSignDiv>
</LoginCheckContainer>
)
//Auth 후 (ModalAuth에서 하던 작업을 여기서 함.)
const [signUpModal, setSignUpModal] = useRecoilState(signUpModalAtom);
const [forgotModal, setForgotModal] = useRecoilState(forgotModalAtom);
const [closeLoginModal, setCloseLoginModal] = useRecoilState(loginModalAtom);
return(
<PwForgotContainer
onClick={() => {
setCloseLoginModal(!closeLoginModal);
setForgotModal(!forgotModal);
}}
>
<LoginCheckSignDiv>아이디/패스워드를 잊으셨나요?</LoginCheckSignDiv>
</PwForgotContainer>
<LoginGoogleContainer>
<AuthSocial
closeModal={() => {
setCloseLoginModal(!closeLoginModal);
}}
/>
</LoginGoogleContainer>
<LoginCheckContainer
onClick={() => {
setCloseLoginModal(!closeLoginModal);
setSignUpModal(!signUpModal);
}}
>
<LoginCheckSignDiv>회원가입 하기</LoginCheckSignDiv>
</LoginCheckContainer>
)
//AuthSignUp 전
interface Props {
// changeModalButton: () => void;
// closeLoginModal: () => void;
}
<StHeder onClick={props.changeModalButton}> 〈 돌아가기 </StHeder>
//AuthSignUp 후
const [signUpModal, setSignUpModal] = useRecoilState(signUpModalAtom);
const [forgotModal, setForgotModal] = useRecoilState(forgotModalAtom);
const [closeLoginModal, setCloseLoginModal] = useRecoilState(loginModalAtom);
<StHeder
onClick={() => {
setCloseLoginModal(!closeLoginModal);
setSignUpModal(!signUpModal);
}}
>
{' '}
〈 돌아가기{' '}
</StHeder>
//AuthForgot 전
interface Props {
forgotModalButton: () => void;
}
return(
<LoginReturnButton onClick={props.forgotModalButton}>
로그인하러 가기
</LoginReturnButton>
)
//AuthForgot 후
return(
<LoginReturnButton
onClick={() => {
setCloseLoginModal(!closeLoginModal);
setForgotModal(!forgotModal);
}}
>
로그인하러 가기
</LoginReturnButton>
)
Recoil은 React 애플리케이션에서 상태(state) 관리를 위한 라이브러리 중 하나이다. 기존에는 Redux와 MobX 등의 라이브러리가 사용되었지만, 최근에는 Recoil과 같은 새로운 라이브러리들이 등장하면서 선택의 폭이 넓어졌다. Recoil을 사용하는 이유는 다음과 같다.
- 간편한 구현과 사용
Recoil은 컴포넌트 간의 상태 전달과 업데이트를 간단하게 구현할 수 있다. Redux와 같은 라이브러리는 상태 업데이트를 위한 별도의 코드와 디렉토리 구조를 만들어야 하지만, Recoil은 React의 hook API를 사용하므로 상태 업데이트를 직관적으로 처리할 수 있다.
- 성능 최적화
Recoil은 React의 내장 기능인 React.memo()와 함께 사용하면 더욱 효율적인 렌더링을 할 수 있다. 이는 상태가 변경되지 않은 경우, 컴포넌트를 다시 렌더링하지 않고 이전에 렌더링된 결과를 재사용하는 것이다.
상태의 중앙 집중화
Recoil은 상태 관리를 위한 하나의 중앙 저장소를 사용한다. 이를 통해 상태의 중앙 집중화를 할 수 있으며, 여러 컴포넌트 간에 공유해야 하는 상태를 쉽게 관리할 수 있다. 이러한 구조는 코드의 가독성과 유지보수성을 높이는데 도움을 준다.
비동기 상태 처리
Recoil은 비동기 상태를 처리하는데도 유용하다. 예를 들어, Promise나 async/await를 사용하여 비동기 데이터를 가져올 때, Recoil의 selector 함수를 사용하면 비동기 데이터를 쉽게 관리할 수 있다.
따라서, Recoil을 사용하면 간편한 구현과 사용, 성능 최적화, 상태의 중앙 집중화, 비동기 상태 처리 등의 이점을 누릴 수 있다.
✔ 월: 최종 프로젝트
✔ 화: 최종 프로젝트
✔ 수: 최종 프로젝트
✔ 목: 최종 프로젝트
□ 금: 최종 프로젝트
✔ 로그인, 회원가입, 비밀번호 찾기 모달 창 리코일
□ 모바일에서 볼 수 있게 반응형으로 만들기