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 훅을 활용할 수 있다.
function useEffect(effect:EffectCallback, deps?:DependencyList):void;
type DependencyList = ReadonlyArray<any>;
type EffectCallback = () => void | Destructor;