React Native/[React Native]Hooks

[React Native] useMemo

코코몹 2022. 7. 6. 18:24

useMemo

동일한 연산의 반복 수행을 제거해 성능을 최적화


코드

useMemo(() => {함수}, [함수 실행 조건]);

두번째 파라미터인 함수 실행 조건은 배열
렌더링 될때마다 호출하는것이 아닌 지정된 값에 변화가 있는 경우에만 함수가 호출



예제1

useMemo 미사용

import React, { useState, useMemo } from 'react';
import { StyleSheet, SafeAreaView, Text, Button } from "react-native";

const styles = StyleSheet.create({
  text: {
    fontSize: 20,
    textAlign: "center",
    marginTop: 10,
    marginBottom: 10,
    paddingHorizontal: 10,
    height: 40,
  }
})

const getLength = text => {
  console.log(`Target Text: ${text}`);
  return text.length;
};

const list = ['textsize10', 'textsize9', 'textsize9', 'textsize10'];

let idx = 0;
const Length = () => {
  const [text, setText] = useState(list[0]);
  const [length, setLength] = useState('');

  const _onPress = () => {
    setLength(getLength(text));
    ++idx;
    if (idx < list.length) setText(list[idx]);
  };

  return (
    <>
      <Text style={styles.text}>Text: {text}</Text>
      <Text style={styles.text}>Length: {length}</Text>
      <Button title="Get Length" onPress={_onPress} />
    </>
  );
};

export default Length;

값의 변화가 없어도 계속 getLength함수가 호출



예제 2

useMemo 사용

import React, { useState, useMemo } from 'react';
import { StyleSheet, SafeAreaView, Text, Button } from "react-native";

const styles = StyleSheet.create({
  text: {
    fontSize: 20,
    textAlign: "center",
    marginTop: 10,
    marginBottom: 10,
    paddingHorizontal: 10,
    height: 40,
  }
})

const getLength = text => {
  console.log(`Target Text: ${text}`);
  return text.length;
};

const list = ['textsize10', 'textsize9', 'textsize9', 'textsize10'];

let idx = 0;
const Length = () => {
  const [text, setText] = useState(list[0]);

  const _onPress = () => {
    ++idx;
    if (idx < list.length) setText(list[idx]);
  };
  const length = useMemo(() => getLength(text), [text]);

  return (
    <>
      <Text style={styles.text}>Text: {text}</Text>
      <Text style={styles.text}>Length: {length}</Text>
      <Button title="Get Length" onPress={_onPress} />
    </>
  );
};

export default Length;

useMemo를 사용해 text의 값이 변경되었을 때만 text의 길이를 구함
이로써 중복 연산을 방지해 성능 최적화 가능



'React Native > [React Native]Hooks' 카테고리의 다른 글

[React Native] useRef  (0) 2022.07.06
[React Native] useEffect  (0) 2022.07.05
[React Native] useState  (0) 2022.07.04