
객체 구조분해할당
const child = {
name : “철수”,
age : 58,
school : “개발 공장”
}
//객체의 비구조화 할당
const {name, age, school} = child
배열 구조분해할당
const children = ["철수", "영희", "훈이"]
const [child2, child2, child3] = children
graphql의 useQuery 구조분해 할당
function useQuery (qqq) {
//qqq API 요청하기 코드 ~~
return {
data: {
fetchBoard: {
writer: "철수"
},
refetch: () => {
console.log("refetch가 실행됩니다")
}
}
}
const { data, refetch } = useQuery(FETCH_BOARDS)
useState의 구조분해할당
function useState (초기값) {
let state = 초기값
const setState = (변경값) => {
console.log(`${state}에서 ${변경값}으로 값을 변경`) // 1. state 변경
console.log(`변경된 ${변경값}을 사용해서 컴포넌트를 리렌더링 함`) // 2. 해당 컴포넌트 리렌더링
}
return [state, setState]
}
const [count, setCount] = useState(0)
rest 사용const { money, hobby, ...rest } = child
그 동안 사용해 왔던 Hook(useState, useEffect...)들은 사실 함수였음
Custom Hook 은 개발자가 스스로 커스텀한 Hook으로, 사용 시 해당 함수를 호출해서 사용
Custom Hooks 사용 주의사항
// src/components/commons/hooks/useAuth.tsx
import { useRouter } from 'next/router'
import { useEffect } from 'react'
function useAuth(){
const router = useRouter()
// useEffect 훅스를 사용하고 있기 때문에 커스텀 훅스입니다.
useEffect(()=>{
if(!localStorage.getItem("accessToken"){
alert("로그인 후 이용 가능합니다!")
void router.push("/23-03-login-check")
}
},[])
}
useAuth 함수를 컴포넌트를 분리하여 새로운 파일로 따로 만듬// custom-hooks-use-auth 폴더의 index.tsx
// 이 페이지는 useAuth를 실행할 페이지입니다.
import { useAuth } from "...파일 공유"
export default function CustomUseAuthPage() {
useAuth()
return <div>프로필 페이지 입니다.</div>
}
useAuth 를 import 해서 실행// src/components/commons/hooks/useMoveToPage.tsx
import { useRouter } from "next/router";
import { useRecoilState } from "recoil";
import { visitedPageState } from "../../../commons/store";
export function useMoveToPage() {
const router = useRouter();
const [visitedPage, setVisitedPage] = useRecoilState(visitedPageState);
const onClickMoveToPage = (path: string) => () => {
setVisitedPage(path);
void router.push(path);
};
return {
visitedPage,
onClickMoveToPage,
};
}
기존의 useMoveToPage 함수를 위와 같이 따로 컴포넌트를 분리하여 따로 파일을 만든 다음, 그 안에 또 다른 함수 onClickMoveToPage 를 만듬
이후 return에 객체 형태로 onClickMoveToPage 함수를 내보냄
*visitedPage는 Recoil로 전역에 저장하여 방문한 페이지를 활용할 필요가 있을 때 사용하기 위해 객체 안에 담아서 함께 return
// custom-hooks-use-move-to-page 폴더의 index.tsx
import { useMoveToPage } from "커스텀 훅의 파일경로 ";
export default function CustomHooksUseMoveToPage() {
// 커스텀 훅으로 분리한 라우터 사용 -> 리턴을 객체로했기때문에 객체로 받아오는 것 입니다.
const { onClickMoveToPage } = useMoveToPage();
return (
<>
<button onClick={onClickMoveToPage("/boards")}>게시판으로 이동</button>
<button onClick={onClickMoveToPage("/markets")}>마켓으로 이동</button>
<button onClick={onClickMoveToPage("/mypage")}>마이페이지로 이동</button>
</>
);
}
onClickMoveToPage 함수 안에 인자로 각 주소 경로를 넣어주면, 해당 함수안의 로직이 실행되어 routing 됨