공부방

useState 본문

TypeScript+React

useState

코딩 화이팅 2023. 8. 31. 14:33
LoggedIn.tsx
import { useState } from "react";

export const LoggedIn = () => {
  const [isLoggedIn, setIsLoggedIn] = useState(false);

  const handleLogin = () => {
    setIsLoggedIn(true);
  };
  const handleLogout = () => {
    setIsLoggedIn(false);
  };
  return (
    <div>
      <button onClick={handleLogin}>Login</button>
      <button onClick={handleLogout}>Logout</button>
      <div>사용자는 {isLoggedIn ? "logged in" : "logged out"}</div>
    </div>
  );
};

 

User.tsx
import { useState } from "react";

type AuthUser = {
  name: string;
  email: string;
};

export const User = () => {
  const [user, setUser] = useState<AuthUser | null>(null);
  const handleLogin = () => {
    setUser({
      name: "강현",
      email: "hyunleo@naver.com",
    });
  };
  const handleLogout = () => {
    setUser(null);
  };
  return (
    <div>
      <button onClick={handleLogin}>Login</button>
      <button onClick={handleLogout}>Logout</button>
      <div>유저의 이름은 {user?.name}</div>
      <div>유저의 이메일은 {user?.email}</div>
    </div>
  );
};
  • const [user, setUser] = useState<AuthUser | null>(null);
  • 이 제네릭 부분은 useState hook과 함께 유니온 타입을 사용하려면, 제네릭 타입으로 유니온 타입을 전달해야한다.
  • user?.name과 user?.email는 null이 나올수도 있기 때문에 ?를 붙여주는 것
App.tsx
import "./App.css";
import { LoggedIn } from "./components/state/LoggedIn";
import { User } from "./components/state/User";

function App() {
  return (
    <div className="App">
      <LoggedIn></LoggedIn>
      <User></User>
    </div>
  );
}

export default App;

as로 상태 초기화

User.tsx
import { useState } from "react";

type AuthUser = {
  name: string;
  email: string;
};

export const User = () => {
  const [user, setUser] = useState<AuthUser>({} as AuthUser);
  const handleLogin = () => {
    setUser({
      name: "강현",
      email: "hyunleo@naver.com",
    });
  };
  return (
    <div>
      <button onClick={handleLogin}>Login</button>
      <div>유저의 이름은 {user.name}</div>
      <div>유저의 이메일은 {user.email}</div>
    </div>
  );
};

const [user, setUser] = useState<AuthUser>({} as AuthUser); as는 오직 AuthUser 타입의 객체만 가질 수 있게 한다는 의미. 초기값으로 빈 객체를 사용하기 때문에 'user.name', 'user.email'에 접근하면 기본적으로 'undefined'값만 반환.

as키워드 : TypeScipt에게 나는 이 타입이 올바르다고 확신한다는 의미.

'TypeScript+React' 카테고리의 다른 글

useRef  (0) 2023.09.06
useReducer  (0) 2023.09.03
Style Props  (0) 2023.08.31
Event Props  (0) 2023.08.30
props 여러 타입들  (0) 2023.08.30