반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 시스템설계방법
- 시스템설계면접팁
- file not found Error
- 가상면접2장
- cypressBDD
- 시스템설계면접예시
- s3이미지다운로드됨
- git commit merge
- 시스템설계면접
- awss3
- 리팩토링2판4장
- gitsquash
- git squash
- 헤드퍼스트전략패턴
- Git commit 합치기
- cypress React
- react-ga
- 가상면접3장
- 리액트구글애널리틱스
- react
- git commit 협업
- 가상면접으로대규모시스템
- 리팩터링2판테스트
- formik react-query submitting not working
- 디자인패턴
- 테스트코드책
- 전략패턴
- FirebaseAnalytics
- 시스템설계
- formik submitting not working
Archives
- Today
- Total
mingg IT
[React] useEffect 를 이용한 API 호출, 이벤트 처리 함수 등록 및 해제 본문
함수 실행 시 함수 외부의 상태를 변경하는 연산을 부수 효과라고 부른다.
useEffect를 주로 사용함.
ex)
API호출, 이벤트 처리 함수를 등록, 해제
[API 호출 예제]
import React, { useState, useEffect } from "react";
export default function MyComponent(userId) {
const [user, setuser] = useState(null);
useEffect(() => {
getUserApi(userId).then((data) => setuser(data));
}, [userId]);
return (
<div>
{!user && <p>사용자 정보를 가져오는 중...</p>}
{user && (
<>
<p>{`name is $(user.name)`}</p>
<p>{`age is $(user.age)`}</p>
</>
)}
</div>
);
}
userId가 변경될 때 마다 호출함. 불필요한 렌더링을 막음
[이벤트 처리 함수를 등록 및 해제]
창 크기 조절에 따른 이벤트
import React, { useState, useEffect } from "react";
export default function MyComponent(userId) {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const onResize = () => setWidth(window.innerWidth);
window.addEventListener("resize", onResize);
return () => {
window.removeEventListener("resize", onResize);
};
}, []);
return <div>{`width is ${width}`}</div>;
}
창 크기가 달라질 때 마다 이벤트를 호출함. 이거 그 OUT 보여주는 부분 창 크기에 따라 table Size조절 이슈 해결할 때 쓸 수 있을듯.
[커스텀 use함수 만들기 예제]
창 크기 조절
import React, { useState, useEffect } from "react";
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const onResize = () => setWidth(window.innerWidth);
window.addEventListener("resize", onResize);
return () => {
window.removeEventListener("resize", onResize);
};
}, []);
return width;
}
function WidthPrinter() {
const width = useWindowWidth();
return <div>{`width is ${width}`}</div>;
}
export default function MyComponent(userId) {
return WidthPrinter();
}
Hook 사용 시 지켜야 할 규칙
1. 하나의 컴포넌트에서 훅을 호출하는 순서는 항상 같아야 한다.
2. 훅은 함수형 컴포넌트 또는 커스텀 훅 안에서만 호출되어야 한다.
리액트가 내부적으로 훅(Hook)을 처리하는 방식
let hooks = null;
export funtion useHook() {
// ...
hooks.push(hookData);
}
function process_a_component_rendering(component){
hooks = [];
component();
let hooksForThisComponent = hooks;
hooks = null;
// ...
}
리액트는 훅이 사용된 순서를 저장하고 배열에 저장된 순서를 기반으로 훅을 관리함
'FrontEnd' 카테고리의 다른 글
[React] ref (0) | 2021.01.18 |
---|---|
[React] context API 사용 vs 미사용 (0) | 2021.01.17 |
[React] input 예제 (0) | 2021.01.17 |
[React] 상탯값 변경 되는 경우 vs 안되는 경우 (0) | 2021.01.17 |
[React] ReactDOM.render 함수를 주기적으로 호출하는 코드 (0) | 2021.01.13 |
Comments