boolean type 을 가지는 간단한 useState
import { FC, useState } from 'react'
export const App: FC = () => {
const [isLoggedIn, setIsLoggedIn] = useState<boolean>(false);
const handleLogin = () => {
setIsLoggedIn(true);
};
const handleLogout = () => {
setIsLoggedIn(false)
};
return (
<div>
<button onClick={handleLogin}>Login</button>
<button onClick={handleLogout}>Logout</button>
<div>Use is {isLoggedIn ? 'Logged in' : 'Logged out'}</div>
</div>
);
};
단순히 boolean type을 지정해 주기만 하면 사용하는 데에 지장이 없다.
사용자 지정 타입의 경우도 비슷하게 적용가능하다
type AuthUser = {
name: string,
email: string,
};
사용자 커스텀 type인 AuthUser을 이용한 useStateHook
import { FC, useState } from 'react';
type AuthUser = {
name: string;
email: string;
};
export const App: FC = () => {
const [user, setUser] = useState<AuthUser | null>(null); // 초기값을 null로 설정하기 위해 유니온을 사용했다
const handleLogin = () => {
setUser({
name: 'joe',
email: 'joe@gmail.com',
});
};
const handleLogout = () => {
setUser(null);
};
return (
<div className='container'>
<div className='input-div mb-2'>
<button className='button' onClick={handleLogin}>
Login
</button>
<button className='button ml-2' onClick={handleLogout}>
Logout
</button>
</div>
{user !== null && (
<div className='output-div'>
<div>User name is {user.name}</div>
<div>User email is {user.email}</div>
</div>
)}
</div>
);
};
별 다른 것 없이 boolean type을 사용하는 것 처럼 useState뒤에 <>으로 지정해 준 다음 사용해 주면 된다
초기값을 null이 아닌 AuthUser 타입의 빈 객체로 만들 수는 없을까?
이 때 사용되는 것이 type assertion 이다. {} as ~ 의 형태로 타입을 지정해 줄 수 있다
export const App = () => {
const [user, setUser] = useState<AuthUser>({} as AuthUser);
.... 이하생략
전체 적용시
import { FC, useState } from 'react';
type AuthUser = {
name: string;
email: string;
};
export const App: FC = () => {
const [user, setUser] = useState<AuthUser>({} as AuthUser);
const handleLogin = () => {
setUser({
name: 'joe',
email: 'joe@gmail.com',
});
};
const handleLogout = () => {
setUser(null);
};
return (
<div className='container'>
<div className='input-div mb-2'>
<button className='button' onClick={handleLogin}>
Login
</button>
<button className='button ml-2' onClick={handleLogout}>
Logout
</button>
</div>
{user !== null && (
<div className='output-div'>
<div>User name is {user.name}</div>
<div>User email is {user.email}</div>
</div>
)}
</div>
);
};
'front_end > react' 카테고리의 다른 글
useContext (typescript) (0) | 2022.05.20 |
---|---|
React - useReducer (in typescript) (0) | 2022.05.13 |
리엑트 앱 이니셜라이즈 (0) | 2022.04.04 |