편집 : 의 도입으로 Hooks
이 행동의 라이프 사이클의 종류뿐만 아니라 기능적인 구성 요소의 상태를 구현하는 것이 가능하다. 현재
후크는 클래스를 작성하지 않고도 상태 및 기타 React 기능을 사용할 수있는 새로운 기능 제안입니다. v16.8.0 의 일부로 React에서 릴리스되었습니다.
useEffect
후크는 수명주기 동작을 복제하는 데 사용할 useState
수 있으며 함수 구성 요소에 상태를 저장하는 데 사용할 수 있습니다.
기본 구문 :
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
다음과 같은 후크에서 사용 사례를 구현할 수 있습니다.
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
useEffect
구성 요소가 마운트 해제 될 때 실행될 함수를 반환 할 수도 있습니다. 이것은 리스너 구독을 취소하고 다음의 동작을 복제하는 데 사용할 수 있습니다 componentWillUnmount
.
예 : componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
useEffect
특정 이벤트를 조건부로 만들려면 변경 사항을 확인하기 위해 값 배열을 제공 할 수 있습니다.
예 : componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
동등한 후크
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
이 배열을 포함하는 경우 시간에 따라 변경되는 구성 요소 범위의 모든 값 (props, state)을 포함해야합니다. 그렇지 않으면 이전 렌더링의 값을 참조하게 될 수 있습니다.
사용에는 약간의 미묘함이 있습니다 useEffect
. API를 확인하십시오 Here
.
v16.7.0 이전
함수 구성 요소의 속성은 Reacts 수명주기 함수 또는 this
키워드에 액세스 할 수 없다는 것 입니다. React.Component
라이프 사이클 함수를 사용하려면 클래스 를 확장해야 합니다.
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
}
함수 구성 요소는 추가 논리없이 구성 요소 만 렌더링하려는 경우에 유용합니다.