<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Labieb</title>
    <description>The latest articles on DEV Community by Labieb (@labiebhn).</description>
    <link>https://dev.to/labiebhn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F776069%2Ff95a8e58-1486-4427-84ae-51927cff0574.jpeg</url>
      <title>DEV Community: Labieb</title>
      <link>https://dev.to/labiebhn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/labiebhn"/>
    <language>en</language>
    <item>
      <title>My React Native Notes #1: Optimasi Aplikasi dengan useMemo</title>
      <dc:creator>Labieb</dc:creator>
      <pubDate>Sun, 20 Sep 2026 05:04:00 +0000</pubDate>
      <link>https://dev.to/labiebhn/my-react-native-notes-1-optimasi-aplikasi-dengan-usememo-45nd</link>
      <guid>https://dev.to/labiebhn/my-react-native-notes-1-optimasi-aplikasi-dengan-usememo-45nd</guid>
      <description>&lt;p&gt;Ketika berhadapan dengan permasalahan kinerja aplikasi yang lambat, &lt;a href="https://www.syncfusion.com/blogs/post/what-is-memoization-in-react.aspx" rel="noopener noreferrer"&gt;&lt;em&gt;memoization&lt;/em&gt;&lt;/a&gt; bisa menjadi solusinya. Dan inilah catatan saya dalam mengimplementasikan &lt;code&gt;useMemo&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu &lt;code&gt;useMemo&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;Singkatnya, &lt;code&gt;useMemo&lt;/code&gt; ialah fungsi pada React untuk mengingat hasil dari suatu proses. Lebih jelasnya, bisa baca dokumentasi ini. &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://react.dev/reference/react/useMemo" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Freact.dev%2Fimages%2Fog%2Freference-react-useMemo.png" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://react.dev/reference/react/useMemo" rel="noopener noreferrer" class="c-link"&gt;
            useMemo – React
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Freact.dev%2Ffavicon-32x32.png" width="32" height="32"&gt;
          react.dev
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Kapan &lt;code&gt;useMemo&lt;/code&gt; digunakan?
&lt;/h2&gt;

&lt;p&gt;Ketika kita menjalankan suatu proses pada fungsi dengan input yang sama berulang-ulang.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const tambah = (a, b) =&amp;gt; a + b;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pemanggilan &lt;code&gt;tambah(1, 2)&lt;/code&gt; secara berulang kali dengan parameter yang sama akan menghasilkan nilai yang konsisten. Untuk pemanggilan kedua dan selanjutnya, &lt;code&gt;useMemo&lt;/code&gt; akan mengabaikan proses kalkulasi 1 + 2 dan langsung memberikan angka 3.&lt;/p&gt;

&lt;p&gt;Terutama untuk proses yang rumit, ini akan meringankan beban komputasi dalam mendapatkan suatu nilai.&lt;/p&gt;

&lt;p&gt;Mari kita lihat contoh kasus pada React Native ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [keyword, setKeyword] = useState('');

const getAnimalsData = () =&amp;gt; {
  let result = animals;

  if (keyword) {
    result = animals.filter(animal =&amp;gt;
      animal.toLowerCase().includes(keyword.toLowerCase()),
    );
  }

  console.log('successfully get animals data!');
  return result;
};
const animalsData = getAnimalsData();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Variabel &lt;code&gt;animalsData&lt;/code&gt; akan menampung hasil dari pengolahan data pada fungsi &lt;code&gt;getAnimalsData&lt;/code&gt; yang bertujuan untuk memfilter ketika nilai dari &lt;em&gt;state&lt;/em&gt; &lt;code&gt;keyword&lt;/code&gt; berubah.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kode di atas akan baik-baik saja jika hanya terdapat satu &lt;em&gt;state&lt;/em&gt;. Sekarang kita coba tambahkan &lt;em&gt;state&lt;/em&gt; &lt;code&gt;showAnimals&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [showAnimals, setShowAnimals] = useState(true);
const [keyword, setKeyword] = useState('');

const getAnimalsData = () =&amp;gt; {
  let result = animals;

  if (keyword) {
    result = animals.filter(animal =&amp;gt;
      animal.toLowerCase().includes(keyword.toLowerCase()),
    );
  }

  console.log('successfully get animals data!');
  return result;
};
const animalsData = getAnimalsData();

const toggleShowAnimals = () =&amp;gt; setShowAnimals(!showAnimals);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;State&lt;/em&gt; &lt;code&gt;showAnimals&lt;/code&gt; akan dijadikan &lt;em&gt;flag&lt;/em&gt; pada tampilan kita nanti.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Permasalahan pun terjadi di sini. Jika nilai dari &lt;em&gt;state&lt;/em&gt; &lt;code&gt;showAnimals&lt;/code&gt; berubah maka variabel &lt;code&gt;animalsData&lt;/code&gt; akan menjalankan ulang fungsi &lt;code&gt;getAnimalsData&lt;/code&gt; yang seharusnya tidak diperlukan. Karena, fungsi &lt;code&gt;getAnimalsData&lt;/code&gt; tidak memakai nilai dari &lt;em&gt;state&lt;/em&gt; &lt;code&gt;showAnimals&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Berikut ini bagaimana saya menggunakan &lt;code&gt;useMemo&lt;/code&gt; untuk mengatasinya. Bungkus pemanggilan fungsi &lt;code&gt;getAnimalsData&lt;/code&gt; dari variabel &lt;code&gt;animalsData&lt;/code&gt; seperti ini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const animalsData = useMemo(getAnimalsData, [keyword]);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;useMemo(function, dependencies)&lt;/code&gt;. Parameter pertama isi dengan fungsi yang akan di-&lt;a href="https://www.syncfusion.com/blogs/post/what-is-memoization-in-react.aspx" rel="noopener noreferrer"&gt;&lt;em&gt;memoize&lt;/em&gt;&lt;/a&gt; nilainya dan parameter kedua isi dengan &lt;em&gt;state&lt;/em&gt; yang dipakai pada fungsi tersebut. &lt;br&gt;
Contohnya seperti ini &lt;code&gt;useMemo(() =&amp;gt; {}, [state])&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sekarang, &lt;code&gt;getAnimalsData&lt;/code&gt; tidak akan berjalan kembali ketika nilai dari &lt;em&gt;state&lt;/em&gt; &lt;code&gt;showAnimals&lt;/code&gt; berubah. Sehingga ini dapat meringankan beban kerja aplikasi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Konklusi
&lt;/h2&gt;

&lt;p&gt;Pemakaian &lt;code&gt;useMemo&lt;/code&gt; dapat menjadi salah satu solusi untuk meringankan beban kerja aplikasi. Karena, tidak ada pemrosesan ulang pada fungsi dengan input yang sama.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;Full Code&lt;/em&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React, {useMemo, useState} from 'react';
import {StyleSheet, Switch, Text, TextInput, View} from 'react-native';

const animals = ['Monkey', 'Horse', 'Cow', 'Goat'];

const App = () =&amp;gt; {
  const [showAnimals, setShowAnimals] = useState(true);
  const [keyword, setKeyword] = useState('');

  const getAnimalsData = () =&amp;gt; {
    let result = animals;

    if (keyword) {
      result = animals.filter(animal =&amp;gt;
        animal.toLowerCase().includes(keyword.toLowerCase()),
      );
    }

    console.log('successfully get animals data!');
    return result;
  };
  const animalsData = useMemo(getAnimalsData, [keyword]);

  const toggleShowAnimals = () =&amp;gt; setShowAnimals(!showAnimals);

  return (
    &amp;lt;View style={styles.container}&amp;gt;
      &amp;lt;Switch value={showAnimals} onValueChange={toggleShowAnimals} /&amp;gt;
      {showAnimals &amp;amp;&amp;amp; (
        &amp;lt;&amp;gt;
          &amp;lt;TextInput
            value={keyword}
            style={styles.textInput}
            placeholder={'Search animals..'}
            onChangeText={setKeyword}
          /&amp;gt;
          &amp;lt;Text&amp;gt;{animalsData.join(', ')}&amp;lt;/Text&amp;gt;
        &amp;lt;/&amp;gt;
      )}
    &amp;lt;/View&amp;gt;
  );
};

export default App;

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
  textInput: {
    width: 200,
    borderWidth: 1,
    borderColor: 'black',
    padding: 8,
    marginVertical: 8,
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Referensi
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/reference/react/useMemo" rel="noopener noreferrer"&gt;https://react.dev/reference/react/useMemo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.joshwcomeau.com/react/why-react-re-renders/" rel="noopener noreferrer"&gt;https://www.joshwcomeau.com/react/why-react-re-renders/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.syncfusion.com/blogs/post/what-is-memoization-in-react.aspx" rel="noopener noreferrer"&gt;https://www.syncfusion.com/blogs/post/what-is-memoization-in-react.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/codeacademia/react-hooks-tutorial-usestate-useeffect-useref-usememo-dan-usecallback-8c8669948f8a" rel="noopener noreferrer"&gt;https://medium.com/codeacademia/react-hooks-tutorial-usestate-useeffect-useref-usememo-dan-usecallback-8c8669948f8a&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.freepik.com/free-photo/rocket-space-concept-success-ai-generated_136709514.htm#query=boost%20rocket&amp;amp;position=10&amp;amp;from_view=keyword&amp;amp;track=ais&amp;amp;uuid=375a1a2c-f30b-43f5-a5bb-738a06ac1d8b" rel="noopener noreferrer"&gt;Image by vwalakte&lt;/a&gt; on Freepik&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>performance</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
