728x90
const Workspace: FC = ({children}) => {

	...
    
    return (
        <div>
            <button onClick={onLogout}>로그아웃</button>
            {children}
        </div>
    )
}

 

💡 {children} 밑에처럼 Workspace 컴포넌트로 감싸면 안에 있는 내용들이 {children} 된다

 


 

const Channel = () => {
    return (
        <Workspace>
            <div>children 안에 들어간다</div>;
        </Workspace>
    );
};

 

리엑트에 있는 FC라는 타입 안에 children 들어있다. 만약 children 쓰지 않는 component 있으면 VFC 사용하면된다.

728x90

📎  swr 잘못 사용하면 패킷들을 마구마구 백앤드로 보내서 셀프 DDOS공격을 하는셈이 된다. 이를 막기 위해서 설정을 있다.


내가 원할 때 swr 호출하기

 

revalidate 함수

 

               ex) const { data, error, revalidate } = useSWR('http://localhost:3095/api/users', fetcher);

axios
    .post(
      ...
    )
    .then(() => {
        revalidate();
    })
    .catch((error) => {
        ...
    });

 

성공 했을 revalidate 호출 해주면 fetcher 실행된다. 원래 정보가 들어있는 data revalidate 실행되면 false 된다.


swr 호출 주기를 늘리기

dedupingInterval
ex) dedupingInterval = 2000     캐시에 저장한 뒤로부터는 2초동안 에는 캐시에서 가져오고, 2초가 지나면 서버에 요청 한번씩 보내기


(컴포넌트가 실행되면 요청을 보내는데 아무리 많은 컴포넌트들이 실행되어도 2초동안에는 서버에는 딱 한번만 요청보내고 나머지들은 첫번째 요청이 성공한것에 대한 데이터를 그대로 가져오겠다는 뜻이다.)

 

focusThrottleInterval
ex) focusThrottleInterval = 5000     revalidate 함수를 5초에 한번씩 제한걸어주기

 

loadingTimeout
ex) loadingTimeout = 3000     요청을 보냈는데 3초가 넘으면 동작함

 

errorRetryInterval
ex) errorRetryInterval = 5000     서버에 요청을 보냈는데 에러가 나면 5초를 기다렸다가 재요청을 보내기

 

errorRetryCount   
최대 몇번까지 재요청이 가능한지 제한하기

'프레임워크 > React' 카테고리의 다른 글

[React] a 와 Link의 차이  (0) 2021.06.26
[React] children  (0) 2021.06.26
[React] SWR  (0) 2021.06.25
[React] CORS로 인한 proxy 설정 그리고 axios요청보내기  (0) 2021.06.25
[React] useCallback  (0) 2021.06.24
728x90

💡 swr은 요청을 보내서 받아온 데이터를 저장해둔다. post를 쓰지못하는 건아니지만 보통은 get 요청에 대한 데이터를 swr이 저장을 해준다.

이 때, 로그인을 할 때는 post요청이고 데이터를 돌려주는데 나는 swr을 쓰고 싶은 상황이다. 그러나 swr은 get요청만 되는데 어떻게 할까?

답: get 요청을 한번 더 보내면 된다. 내가 로그인을 했으니 내 정보갖다 줘라는요청을 서버에 보내주는 것이다.

 

🔨  설치 및 사용
터미널에 "npm i swr"

import useSWR from "swr";

 

📎  보통 형식은 이렇다
const {data, error} = useSWR(‘주소’, {config: withCredentials: true,}, 처리방식);

useSWR은 주소를 처리방식으로 넘겨준다. 이때주소는 처리방식에 매개변수로 넘어간다.
ex) const {data, error} = useSWR('http://localhost:3095/api/users', fetcher);


위의 예시의 fetcher를 따로 구현을 해보면 아래와 같다

const fetcher = (url) = axios.get(url, {config: withCredentials: true,}).then((response :AxiosResponse<any>) => response.data);


매개변수(url)로 주소가 넘어오면 그 주소로 axios.get요청을 보낸다. 그것에 대한 응답에서 데이터를 꺼내서 돌려준다. 그리고 그 데이터는 const{data, error}에 data에 들어가고 error는 서버에러 등이들어간다.


const fetcher = (url) = axios.get(url, {config: withCredentials: true,}).then((response :AxiosResponse<any>) => response);이면 const{response} 로 해야 한다.

※ 그리고 withCredentials: true를 해주어야 쿠키요청 응답이가능해진다. (백앤드와프런트 앤드의주소가 다를 때 필수 설정)


최종적으로


 

로그인이 되었을 때의 화면이고 밑의 정보는 data에 담겨있다.
쿠키가 생겼고
응답 헤더에 쿠키와 함께 오면서 로그인 되었다는 것을 사이트가 알 수 있게 한다.

 


장점


  • 로딩 상태도 알 수 있다. 만약 데이터가 존재하지 않으면 로딩 중이라는 뜻이다.
  • 다른 탭에 갔다가 오면 자동으로 요청을 보내서 항상 최신 화면으로 유지시켜준다.

 

+ Recent posts