반업주부의 일상 배움사
[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를 쓰면 돼요.
영어, 중국어 공부중이신가요?
홈스쿨 교재. 한 권으로 가족 모두 할 수 있어요!
반응형
LIST
'IT 인터넷 > React Native & JS' 카테고리의 다른 글
[React Native] 타일형 버튼 세트 구현하기 (0) | 2021.07.24 |
---|---|
[React.js] 반복문으로 객체 생성하기 :: v-for of Vue.js (0) | 2021.07.19 |
[React.js] 단숨에 리덕스 익히기 :: react-redux (0) | 2021.07.17 |
[React.js] 단숨에 스타일링 익히기 :: styled-components (0) | 2021.07.17 |
[React.js] 단숨에 라우팅 이해하기 :: Routing (0) | 2021.07.17 |
Comments