리액트 훅

useState

function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
    
type Dispatch<A> = (value: A) => void;
type SetStateAction<S> = S | ((prevState: S) => S);
import React from "react";

const MemberList = () => {
  const [memberList, setMemberList] = useState([
    {
      name: "kim",
      age: 10,
    },
    {
      name: "park",
      age: 20,
    },
  ]);
};

// addMember 함수를 호출하면 sumAge는 NaN이 된다.
const sumAge = memberList.reduce((sum, member) => sum + member.age, 0);
const addMember = () => {
  setMemberList([
    ...memberList,
    {
      name: "lee",
      age: 11,
    },
  ]);
};
import React from "react";

interface Member {
  name: string;
  age: number;
}

const MemberList = () => {
  const [memberList, setMemberList] = useState<Member[]>([]);
};

const sumAge = memberList.reduce((sum, member) => sum + member.age, 0);
const addMember = () => {
  //Error: Type Member | {name:string; agee:number;}
  //is not assignable to type 'Member' 
  setMemberList([
    ...memberList,
    {
      name: "lee",
      agee: 11,
    },
  ]);
};

useEffect와 useLayoutEffect

렌더링 이후 리액트 함수 컴포넌트에 어떤 일을 수행해야 하는지 알려주기 위해 useEffect 훅을 활용할 수 있다.

function useEffect(effect:EffectCallback, deps?:DependencyList):void;

type DependencyList = ReadonlyArray<any>;
type EffectCallback = () => void | Destructor;