반응형
도서 <리액트 네이티브를 다루는 기술>을 읽고 도움이 될 만한 부분을 기록합니다
atom으로 상태 만들기
import {atom} from 'recoil';
export interface User {
id: number;
username: string;
displayName: string;
}
interface AuthState {
user: User | null;
}
// 타입스크립트 환경에서 recoil을 사용할 때에는 atom의 generic으로 관리
export const authState = atom<AuthState>({
key: 'authState',
default: {
user: null,
},
});
상태를 관리하는 user-defined hooks 만들기
현재의 user 상태를 불러오는 hooks인 useUser()
import {useRecoilValue} from 'recoil';
import {authState} from '../atoms/auth';
export default function useUser() {
const auth = useRecoilValue(authState);
return auth.user;
}
새로운 사용자로 user 상태를 업데이트하거나, 로그아웃하면서 user 상태를 초기화 시키는 hooks
import {useSetRecoilState} from 'recoil';
import {authState, User} from '../atoms/auth';
import {useMemo} from 'react';
export default function useAuthActions() {
const set = useSetRecoilState(authState);
return useMemo(
() => ({
authorize: (user: User) => set({user}),
logout: () => set({user: null}),
}),
[set],
);
}
useMemo 라는 성능을 최적화하기 위한Hook 함수이다.
useMemo 의 첫번째 파라미터에는 어떻게 연산할지 정의하는 함수를 넣어주면 되고 두번째 파라미터에는 deps 배열을 넣어주면 되는데, 이 배열 안에 넣은 내용이 바뀌면, 우리가 등록한 함수를 호출해서 값을 연산해주고, 만약에 내용이 바뀌지 않았다면 이전에 연산한 값을 재사용하게 된다
라고 하는데 아직은 잘 모르겠음..
사용하기
import useAuthActions from '../hooks/useAuthActions';
import useUser from '../hooks/useUser';
const {authorize, logout} = useAuthActions();
const onLogIn = () => {
authorize({
id: 1,
username: 'sezzled',
displayName: '세리둥절',
})
}
반응형
'프론트엔드 앱 > React-native' 카테고리의 다른 글
React Native typescript 프로젝트 만들때 초기셋팅 (0) | 2021.11.25 |
---|---|
recoil을 활용하여 REST API 요청하기 (0) | 2021.11.24 |
[React Native] src를 절대 경로로 설정하기 (0) | 2021.11.19 |
React Native Navigation 상단상태바 없애기 (0) | 2021.11.12 |
TS에러'{ children: Element[]; }' 유형에 'IntrinsicAttributes' 유형과 공통적인 속성이 없습니다.ts(2559) (0) | 2021.11.11 |