React 갈고리 다시 보기:useEffect
useState
를 이해했다.이번에 우리는 또 다른 자주 사용하는 갈고리를 볼 것이다. useEffect
:By using this Hook, you tell React that your component needs to do something after render. React will remember the function you passed (we'll refer to it as our "effect"), and call it later after performing DOM updates. ~ React docs
영향이 무엇입니까?
효과는 렌더링 단계에서 완료할 수 없는 어셈블리 작업이나 동작을 나타내는 부작용의 약어입니다.예를 들면 다음과 같습니다.
document.title
와 같은 작업은 더 이상 진행할 필요가 없다.정리 효과를 간소화하기 위해서
useEffect
API는 갈고리에서 함수를 되돌려줍니다. 이 함수는 탐지기, 구독 등을 삭제하는 데 사용됩니다. 이전에는 componentDidMount
와 componentDidUnmount
생명주기 방법을 이용해서 이 모든 것을 처리할 수 있습니다. useEffect
사용 효과 분석
지금 우리는
useEffect
의 작용을 토론했으니 문법을 살펴보자.useEffect(() => {
// 2. This function body is your effect
window.addEventListener("resize", handleResize)
return () => {
// 1. Optionally clean up effects inside this function
window.removeEventListener("resize", handleResize)
}
}, []) // 3. Conditionally execute based on dependencies array
이 문법이 좀 이상해 보이면 걱정하지 마세요.몇몇 실제 예를 시작하기 전에, 우리는 모든 부분을 분해할 것이다.우리가 방금 그것을 토론했기 때문에 선택할 수 있는 청소 기능부터 시작합시다.1. 정리
우리의 효과에서 우리는 함수를 되돌려 주는 것을 선택할 수 있다.이 구성 요소를 마운트 해제할 때, 이 함수는 우리가 실행하고자 하는 모든 청소 작업을 실행합니다.예시에서, 우리는 구성 요소가 DOM에 더 이상 존재하지 않을 때, 계속 탐지/터치하지 않도록 창에서 이벤트 탐지기를 삭제할 것입니다.
2. 효과
첫 번째 인자
useEffect
는 함수다.이 함수는 구성 요소를 설치할 때 실행할 작업을 정의하는 효과입니다.이 예에서, 우리는 handleResize
함수에 이벤트 탐지기를 resize
실행하는 창에 추가할 뿐입니다.3. 의존항수 그룹
이 예에서 선택할 수 있는 두 번째 매개 변수는 이른바 '의존항수 그룹' 이다.본질적으로 이 그룹을 이용하여 구성 요소의 도구나 상태 값의 변화에 따라 효과의 조건을 제어할 수 있다.우리는 다음 절에서 이 문제를 더욱 깊이 토론할 것이다.
의존 관계 수조는 무엇입니까?
By default, effects run after every completed render, but you can choose to fire them only when certain values have changed. ~ React docs
위에서 말한 바와 같이 의존항수 그룹은
useEffect
갈고리에 전달할 수 있는 선택할 수 있는 보조 매개 변수이다.구성 요소의 값에 따라 효과를 쉽게 제어할 수 있도록 하기 위해서입니다.클래스 구성 요소에서 우리는 componentDidUpdate
생명주기 방법을 사용하여 같은 결과를 실현해야 할 가능성이 높다. 이것은 다음과 같다.componentDidUpdate(prevProps, prevState) {
if (prevState.cardTypes !== this.state.cardTypes) {
// Your effect logic would live here
}
}
dependencies 배열을 사용하여 다음 작업을 수행할 수 있습니다.useEffect(() => {
const cardTypes = fetchCardTypes()
setCardTypes(cardTypes)
})
useEffect(() => {
const cardTypes = fetchCardTypes()
setCardTypes(cardTypes)
}, [])
useEffect(() => {
const cardTypes = fetchCardTypes()
setCardTypes(cardTypes)
}, [cards])
여기서 주의해야 할 점은 if
갈고리에 useEffect
문구를 사용하여 논리를 조건부로 집행할 수도 있지만 if
문구에 갈고리를 포장할 수는 없다는 것이다.React 유지 효과를 예측할 수 있는 일부 방법은 렌더링 시 모든 효과를 실행하는 것입니다.이런 효과가 나쁜 방법으로 여겨지는 것을 건너뛰는 것은 좋지 않으니 이렇게 하지 마라!실상
아래의 모래상자에서, 나는 화성의 최신 날씨에 대한 정보를 제공하는 작은 응용 프로그램을 만들었다.엘론 머스크, 너의 마음을 먹어라!
간단하게 보기 위해서, 나는 두 개의 구성 요소를 만들었다.
useEffect
와 App
.전자는 Nasa API 및 애플리케이션 로직에서 데이터를 가져오고, 후자는 우리가 전달한 데이터를 도구로 간단하게 표시합니다.그렇기 때문에 우리 모두WeatherDisplay
의 갈고리는 useEffect
의 내부에 산다.보시다시피 저희 구성 요소 내부에 실제로 3개
App
의 연결고리가 있습니다. 이것은 좀 이상하게 보일 수 있지만 이것이 바로 연결고리의 전체 개념입니다!이것은 우리로 하여금 우리의 구성 요소 논리를 구분하고 그것들이 촉발하는 효과에 대해 추리하기 쉽게 한다.이 예에서는 세 개의 훅이 다음 작업을 수행합니다.useEffect
stateday
갈고리 #3은 day
의 값에 따라 day
또는 data
의 값에 어떠한 변화가 발생할 때에 정확한 데이터 대상을 해석한다.이 갈고리들 중 하나는 우리가 앞에서 논의한 선택 가능한 의존수 그룹의 다른 변체를 사용했다.코드를 좀 더 자세히 보세요. 왜 모든 그룹이 이렇게 보이는지 아십니까?
만약 네가 여전히 약간 곤혹스러우면 걱정하지 마라. 왜냐하면 '갈고리로 생각하는 것' 을 배우는 데는 약간의 시간이 필요할 수 있기 때문이다.그것들을 더 잘 사용하는 가장 좋은 방법은 그것을 사용하는 것이다. 따라서 위의 모래상자를 마음대로 사용하고 코드를 사용하십시오.좋은 시작으로 Hook# 2에서 의존 항목 배열을 완전히 삭제할 수 있습니다.무슨 일이 일어날까요?
의존 항목 배열이 비어 있으면 마운트할 때 API 데이터를 요청합니다. 이 경우 한 번만 발생합니다.이전에, 우리는
componentDidUpdate
구성 요소 prevProps
를 현재 구성 요소 props
와 비교하고, 그것을 사용하여 할 일이 있는지 확인할 것입니다.이제 useEffect
우리는 더 이상 이렇게 할 필요가 없다. 우리가 관심을 가지는 도구의 값을 정의하고 그 중 하나가 바뀔 때만 효과를 실행할 수 있다.우리는 이 시리즈의 뒷부분에서 이 점을 상세하게 토론할 것이다.종속 항목 배열을 완전히 제거하면 각 렌더링에서 효과가 실행됩니다. 즉, 어셈블리가 다시 렌더링될 때마다 API 호출이 수행됩니다.상태 변경(예:
Today
또는 Yesterday
버튼 클릭) 등의 간단한 작업으로 인해 렌더링이 다시 수행되므로 기본적으로 사용자가 버튼 중 하나를 클릭할 때마다 데이터를 가져옵니다.이것은 어플리케이션 성능과 API 청구서에 도움이 되지 않습니다.최종적으로 갈고리는 응용 프로그램의 논리를 구분하여 다시 사용하고 추리하기 쉽도록 하는 데 목적을 두고 있다.
useEffect
도 예외는 아니다.모든 갈고리와 마찬가지로, 모든 렌더링에서 기본적으로 실행되지만, 다른 갈고리와 달리, 논리적 실행을 조건부로 제어하는 방법 (즉 의존항수 그룹) 을 제공합니다.useEffect
는 보통 componentDidMount
,componentDidUpdate
와componentWillUnmount
로 묘사되지만 갈고리의 등효 생명주기 방법의 측면에서 갈고리를 고려하는 것은 최대한 피하겠습니다.반대로 구성 요소에서 발생할 효과를 확인하고, 원하는 효과가 실행되는 빈도를 확인하며, 구성 요소가 마운트 해제될 때 작업을 정리합니다. (필요할 경우)다음 구성 요소에
useEffect
를 추가합니다.아마도 너는 중독될 것이다.
Reference
이 문제에 관하여(React 갈고리 다시 보기:useEffect), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ryanharris/react-hooks-revisited-useeffect-4ph텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)