안녕하세요, 이 연습 에서는 전문가처럼 React의 useEffect 기능 을 사용하기 위해 알아야 할 모든 것을 보여드리겠습니다 .
useEffect 가 있기 전에는 다음 과 같은 수명 주기 메서드가 있었습니다.
componentDidUpdate(prevProps, prevState) {
if (prevProps.foo !== this.props.foo) {/* do something */}
if (prevState.bar !== this.state.bar) {/* do something else */}
}
이러한 수명 주기 메서드를 사용하면 구성 요소 상태의 모든 변경 사항을 안정적으로 처리할 수 있습니다. 그렇다면 왜 useEffect 로 변경 할까요 ?
어느 시점(2016년 초로 생각합니다)에서 React 팀은 일반적인 구식 Javascript 기능으로 인스턴스화할 수 있는 React 구성 요소를 만들기로 결정했습니다. 그래서:
import React from "react";
function MyFunc() {
return <div>Hey!</div>
}
상태 변경을 관리하는 새로운 접근 방식 은 React 라이브러리에 의해 노출되는 useEffect 함수 의 형태로 제공 됩니다. 그렇다면 우리가 사랑하는 componentDidMount , componentDidUpdate 및 componentWillUnmount 메소드를 어떻게 다시 생성 할까요? 이전의 상태 비저장 기능을 확장해 보겠습니다.
import React from "react";
function MyFunc(props) {
const [bar setBar] = React.useState(null);
React.useEffect(() => {
console.log("componentDidMount");
return () => {
console.log("componentDidUnmount")
}
}, []);
React.useEffect(() => {
console.log("componentDidUpdate when 'bar' changes");
}, [bar]);
React.useEffect(() => {
console.log("componentDidUpdate when 'props.foo' changes");
}, [props.foo]);
return <div>Hey!</div>
}
이 예제에 추가한 또 하나의 상태 후크인 React.useState는 이 튜토리얼의 범위를 벗어나지만 여기에서 자세히 알아보세요 !
구성 요소의 상태와 이전 수명 주기 방법을 모두 관리할 수 있다는 점이 좋습니다. 상태 비저장 함수의 단순성과 재사용성, 그리고 React.useEffect 함수 사이에서 재사용 가능한 상태 저장 함수 또는 더 일반적으로 명명된 사용자 정의 후크 와 같은 새로운 패러다임을 사용할 수 있게 되었습니다 .
당신과 같은 정통한 독자는 useEffect를 사용하면 이전처럼 prevProps 또는 prevState 속성에 액세스할 수 없다는 것을 알아차렸을 것입니다. 두려워하지 마십시오! 여기에 대한 솔루션을 읽으십시오 . 이 솔루션이 작동하는 이유는 React.useRef가 구성 요소의 다시 렌더링을 트리거하지 않기 때문입니다. 또한 종속성이 없는 useEffect는 어떤 상태 변경이 트리거했는지에 관계없이 구성 요소를 다시 렌더링할 때마다 트리거합니다.
React 가 공식 문서 여기에서 공유하는 것보다 커스텀 훅에 대한 더 나은 기본 예제는 없습니다 . 예제의 맨 아래부터 시작하여 위로 이동해 보겠습니다.
function FriendListItem(props) {
const isOnline = useFriendStatus(props.friend.id);
return (
<li style={{ color: isOnline ? 'green' : 'black' }}>
{props.friend.name}
</li>
);
}
import React, { useState, useEffect } from 'react';
function useFriendStatus(friendID) {
const [isOnline, setIsOnline] = useState(null);
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
useEffect(() => {
ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
return () => {
ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
};
});
return isOnline;
}
이 자습서에서는 다음을 검토했습니다.
머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.
이 놀라운 노코드 플랫폼의 미개발 잠재력을 활용하면서 스릴 넘치는 혁신과 성공의 여정을 시작하십시오. 뛰어난 여성 기업가인 Sapna에 대한 이야기를 들려드리겠습니다.
지역 서점과 또 다른 책을 흥정하면서 손에 가려움증이 퍼졌습니다. 내가 최근에 구입한 나머지 책과 같은 이 책은 내 'To Be Read'(TBR) 더미에서 왕좌를 찾을 것입니다. 그러나 나는 그것을 샀다.
햇빛의 첫 번째 광선이 평원의 서리가 내린 풀을 비추는 서쪽 언덕의 눈부신 황금빛 아침입니다. 온화하고 거대한 새까만 앵거스 소 떼가 일출을 배경으로 윤곽을 그리며 다져진 길을 따라 모두가 잘 아는 지역으로 향합니다. 조식 바.
facebook.com에 요청하면 컴퓨터가 도메인 이름을 조회하여 해당 도메인 이름을 IP 주소로 변환하므로 컴퓨터가 해당 연결을 만들 수 있습니다.