useQuery
=> api 요청이 날아가고 받아와서 화면에 그림이 그려지게 함
요청: 자동 / 그림: 자동
내가 원할 때 쿼리가 날아갔으면 좋겠는데...
useLazyQuery
useMutation 처럼 함수를 만들 수 있고, 함수를 실행할 때 데이터 요청이 날아가고, 데이터가 받아진 후로는 useQuery와 동일하게 화면에 그림이 그려짐
useQuery와 다른점은 실행만 내가 원할 때 할 수 있다는 것
요청: 수동 / 그림: 자동 (리렌더링이 자동으로 된다는 것)
useApolloClient
axios랑 비슷하며 자동으로 화면에 그려주지 않는다.
요청: 수동 / 그림: 수동
const client = useApolloClient();
import { useApolloClient } from "@apollo/client";
const resultUserInfo = await client.query({
query: FETCH_USER_LOGGED_IN,
context: {
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
});
const userInfo = resultUserInfo.data.fetchUserLoggedIn;
console.log(userInfo);
});
context: 옵션형태로 추가 입력하고 싶은 데이터가 있을 때
스토어도 유저스토어, 게시판스토어 등 스테이트를 나눠서 관리하면 좋을 것
localStorage.setItem("userInfo", JSON.stringify(userInfo));
객체는 로컬스토리지나 세션스토리지에 저장이 안되므로 객체를 문자열로 바꿔서 저장해야한다.
const [userInfo, setUserInfo] = useRecoilState(userInfoState);
useEffect(() => {
const accessToken = localStorage.getItem("accessToken");
const userInfo = JSON.parse(localStorage.getItem("userInfo") || "{}");
setAccessToken(accessToken || "");
setUserInfo(userInfo || "");
});
새로고침하면 데이터가 날아가므로 userInfo의 정보도 apollo 페이지에서 getItem을 추가한다.
불러올 때는 문자열을 객체로 풀어서야 하므로 JSON.parse 사용
배열의 순서가 중요하므로 앞에 걸 안쓰더라도 콤마를 꼭 찍어주고, 뒤에 걸 안 쓰게 되면 콤마는 필요없다.
폼 안에서 button type="reset"은 input이 빈값으로 변경되게 한다.
type="submit"은 onSubmit={} 안이 실행이 되면서 백엔드로 전송
type 지정을 안해준다면 ?
type="submit"이 default 값이므로 타입 지정을 안 해준 것과, type="submit"이 함께 실행된다.
react-form
redux를 쓴다하면 redux-form
react-hook-form (사용방법이 간단하고 최근 가장 많이 사용)
formik (가장 유명했다)
... 등을 사용한다
다른 라이브러리들은 제어 컴포넌트 방식이기 때문에 속도가 느리다.
React-Hook-Form은 비제어 컴포넌트이기 때문에 속도가 빠르다. 리렌더가 일어나지 않는다.
yarn add react-hook-form
handleSubmit(onClickSubmit)을 실행하게 되면
onClickSubmit이 실행될 때 데이터를 data에 넣어주게 됨
.을 추가하게 되면 객체 안에 데이터가 담기게 된다.
에러를 검증해주는 라이브러리
if문으로 하나하나 검증 할 필요없이 yup 하나로 가능
어떤 하나의 라이브러리에 종속되어있지 않다.
react-hook-form과 함께 사용하기 위해 yupResolver를 추가해야함.
yarn add @hookform/resolvers yup
resolver: yupResolver(),
resolver: 데이터를 등록할 때 검증해 줄 함수를 등록해라
yup.aaa
yup.bbb
yup.ccc...
resolver와 schema가 합쳐지게 된다.
공통 컴포넌트로 더 세세하게 쪼개기
주의할 점: type을 태그에 선언하면 반드시 props 해줄 것!
우리 회사가 가지고 있는 컴포넌트가 무엇이 있는지 디자이너와 얘기해서 만들게 됨.
스토리북 예시 주소 https://brunch.co.kr/@kmongdev/17
프론트엔드에서 만들어서 줘야함.
yarn add storybook