[React.js] useMemo와 useEffect
함수형 컴포넌트에서 외부의 데이터를 가져와야 할 때가 있죠.
useMemo와 useEffect를 쓸 수 있어요.
둘 다 두 번째 파라미터로 외부 데이터의 변경을 관찰할 수 있는데요.
만약 useEffect(함수, []) 이렇게 빈 배열을 넣으면 처음에 딱 한 번만 함수가 실행되고요.
useEffect(함수, [props.value])라고 하면 props.value가 변경될 때마다 함수가 실행되요.
함수형 컴포넌트는 생명주기(componentDidMount, componentDidUpdate, ...) 메소드가 없어서 useEffect로 대신 구현하기도 해요.
먼저 useMemo 예제를 보죠.
Main 컴포넌트는 1초마다 값을 바꾸는 역할만 해요.
import React, { Component, useEffect, useState } from 'react';
import { useMemo } from 'react';
// 1초마다 값을 바꾸는 역할
class Main extends Component {
constructor(props) {
super(props);
this.state = { value: 1 };
}
componentDidMount() {
setInterval(() => {
this.setState({
...this.setState,
value: this.state.value + 1,
});
}, 1000);
}
render() {
return React.cloneElement(this.props.children, {
value: this.state.value,
});
}
}
// 여기만 보면 되요
function Counter(props) {
const _v = useMemo(() => props.value, [props.value]);
return (
<div>
<h1>{_v}</h1>
</div>
);
}
function App() {
return (
<Main>
<Counter />
</Main>
);
}
export default App;
Counter에서 useMemo를 쓰고 있어요.
두 번째 파라미터에 props.value를 넣었기 때문에 해당 값이 변경될 때마다 새로운 값을 가져와요.
만약 [] 빈 배열을 넣었다면 첫 번째 값을 가져온 후로는 값이 바뀌지 않을거에요.
Counter의 useMemo를 useEffect로 변경해보죠.
function Counter(props) {
const [_v, _setV] = useState(null);
useEffect(() => {
_setV(props.value);
}, [props.value]);
return (
<div>
<h1>{_v}</h1>
</div>
);
}
만약 Counter 내에서 _v의 값을 변경하고 싶다면 useEffect를 사용할 수 있겠죠.
외부의 값을 가져오기만 할거라면 useMemo를 쓰면 돼요.
Author And Source
이 문제에 관하여([React.js] useMemo와 useEffect), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@banjubu/React.js-useMemo와-useEffect저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)