<?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: sandatya widhi</title>
    <description>The latest articles on DEV Community by sandatya widhi (@sandatya_widhi_ce7cb1c809).</description>
    <link>https://dev.to/sandatya_widhi_ce7cb1c809</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2824169%2Fa56b5ec7-dfcf-4a0a-acb4-bb1836eb29c7.png</url>
      <title>DEV Community: sandatya widhi</title>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sandatya_widhi_ce7cb1c809"/>
    <language>en</language>
    <item>
      <title>LATIHAN SOAL</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Mon, 01 Dec 2025 07:10:04 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-soal-4n6b</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-soal-4n6b</guid>
      <description>&lt;h1&gt;
  
  
  Migrasikan Program React Native Berikut ke Redux
&lt;/h1&gt;

&lt;p&gt;Pada latihan ini, kamu diminta &lt;strong&gt;memigrasi dua program&lt;/strong&gt; (Counter dan ToDoApp) dari penggunaan &lt;strong&gt;state lokal (useState)&lt;/strong&gt; menjadi menggunakan &lt;strong&gt;Redux&lt;/strong&gt;.&lt;br&gt;
Setiap contoh sudah diberikan &lt;strong&gt;kode awal sebelum Redux&lt;/strong&gt; serta &lt;strong&gt;langkah migrasinya&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  1️⃣ &lt;strong&gt;Program Counter (Versi Sebelum Redux)&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;StyleSheet&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// state lokal untuk counter&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counterText&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Counter: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"+"&lt;/span&gt; &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"-"&lt;/span&gt; &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StyleSheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;justifyContent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;alignItems&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;counterText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;marginBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;row&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;flexDirection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;row&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Langkah Migrasi ke Redux
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Buat file &lt;code&gt;counterReducer.jsx&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Berisi reducer dengan action &lt;code&gt;INCREMENT&lt;/code&gt; dan &lt;code&gt;DECREMENT&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Buat &lt;code&gt;store.jsx&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Gunakan &lt;code&gt;combineReducers()&lt;/code&gt; dan &lt;code&gt;createStore()&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bungkus root app dengan Provider&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;store&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hapus &lt;code&gt;useState&lt;/code&gt; dari komponen Counter.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ganti pembacaan value dengan:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ganti tombol plus/minus menjadi dispatch:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;INCREMENT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
   &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DECREMENT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tes aplikasi.&lt;/strong&gt;
Pastikan counter bekerja sama seperti sebelumnya.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2️⃣ &lt;strong&gt;Program ToDoApp (Versi Sebelum Redux)&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TextInput&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;FlatList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;TouchableOpacity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;StyleSheet&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TodoScreen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;addTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nf"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nf"&gt;setText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deleteTodo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TextInput&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Tulis todo..."&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChangeText&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;setText&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Tambah"&lt;/span&gt; &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;addTodo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;FlatList&lt;/span&gt;
        &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;keyExtractor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="na"&gt;renderItem&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TouchableOpacity&lt;/span&gt; &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;deleteTodo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hapus&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;TouchableOpacity&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StyleSheet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;borderWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;marginBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;flexDirection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;row&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;alignItems&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;center&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;paddingVertical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;marginLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Langkah Migrasi ToDo ke Redux
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Buat &lt;code&gt;todoReducer.jsx&lt;/code&gt;&lt;/strong&gt;
Harus menangani:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ADD_TODO&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DELETE_TODO&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Buat &lt;code&gt;store.jsx&lt;/code&gt; dan bungkus App dengan Provider.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Di &lt;code&gt;TodoScreen&lt;/code&gt;:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Hapus state:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTodos&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Ganti dengan:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;todos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;todo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;todos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Migrasi fungsi tambah todo:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
     &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ADD_TODO&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Migrasi fungsi hapus todo:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;   &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
     &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DELETE_TODO&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
   &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tes aplikasi.&lt;/strong&gt;
Pastikan tambah &amp;amp; hapus todo bekerja seperti sebelumnya.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Mengenal React Redux</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Sun, 30 Nov 2025 03:57:15 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/mengenal-react-redux-dan-react-native-elements-2j47</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/mengenal-react-redux-dan-react-native-elements-2j47</guid>
      <description>&lt;h1&gt;
  
  
  1. Apa Itu Redux?
&lt;/h1&gt;

&lt;p&gt;Redux adalah tempat menyimpan data aplikasi secara global.&lt;br&gt;
Jika aplikasi Anda hanya memiliki 1 atau 2 komponen, maka state biasa (useState) sudah cukup.&lt;br&gt;
Tetapi dalam aplikasi besar, banyak komponen membutuhkan data yang sama, misalnya:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data user login&lt;/li&gt;
&lt;li&gt;keranjang belanja&lt;/li&gt;
&lt;li&gt;notifikasi&lt;/li&gt;
&lt;li&gt;tema aplikasi&lt;/li&gt;
&lt;li&gt;status online/offline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Redux membantu mengelola data global ini dengan rapi, konsisten, dan mudah dipakai di banyak halaman.&lt;/p&gt;


&lt;h1&gt;
  
  
  2. Mengapa Redux Diperlukan?
&lt;/h1&gt;

&lt;p&gt;Contoh masalah tanpa Redux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anda punya screen Home.&lt;/li&gt;
&lt;li&gt;Anda punya screen Cart.&lt;/li&gt;
&lt;li&gt;Anda punya ProductCard yang tersebar di banyak tempat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jika user menambah barang ke keranjang di Home, bagaimana Cart tahu bahwa barang sudah bertambah?&lt;/p&gt;

&lt;p&gt;Tanpa Redux, Anda akan melakukan "oper-oper props" yang panjang (props drilling).&lt;br&gt;
Itu membuat aplikasi sulit dipelihara.&lt;/p&gt;

&lt;p&gt;Dengan Redux:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data disimpan di satu tempat (store)&lt;/li&gt;
&lt;li&gt;Semua screen bisa membaca dan mengubah data tersebut&lt;/li&gt;
&lt;li&gt;Tidak ada props drilling&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  3. Cara Kerja Redux
&lt;/h1&gt;

&lt;p&gt;Redux memiliki 4 konsep dasar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Store&lt;br&gt;
Tempat menyimpan seluruh data global aplikasi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Action&lt;br&gt;
Perintah yang dikirim untuk mengubah state. Contoh: &lt;code&gt;ADD_ITEM&lt;/code&gt;, &lt;code&gt;REMOVE_ITEM&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reducer&lt;br&gt;
Fungsi yang memutuskan bagaimana state berubah ketika action dikirim.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dispatch&lt;br&gt;
Cara kita memanggil action ke reducer.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Skema sederhananya:&lt;/p&gt;

&lt;p&gt;Komponen → dispatch(action) → reducer → store → komponen otomatis terupdate&lt;/p&gt;


&lt;h1&gt;
  
  
  4. Instalasi Redux Toolkit
&lt;/h1&gt;

&lt;p&gt;Redux modern memakai Redux Toolkit karena lebih mudah dipakai.&lt;/p&gt;

&lt;p&gt;Jalankan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @reduxjs/toolkit react-redux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React Redux menghubungkan Redux dengan React Native.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Studi Kasus: Aplikasi Keranjang Belanja Sederhana
&lt;/h1&gt;

&lt;p&gt;Pada studi kasus ini kita membuat aplikasi yang memiliki dua halaman:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;HomeScreen&lt;br&gt;
Menampilkan daftar produk + tombol tambah ke keranjang.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cart&lt;br&gt;
Menampilkan semua item dalam keranjang.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Navigasi antar halaman memakai React Navigation.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Struktur Folder
&lt;/h1&gt;

&lt;p&gt;Gunakan struktur berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
 ├── App.jsx
 ├── MainApp.jsx
 ├── screens/
 │     ├── HomeScreen.jsx
 │     └── Cart.jsx
 ├── redux/
 │     ├── store.js
 │     └── cartSlice.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  7. Implementasi
&lt;/h1&gt;




&lt;h2&gt;
  
  
  File 1: App.jsx
&lt;/h2&gt;

&lt;p&gt;Membungkus aplikasi dengan Provider agar Redux bisa digunakan di seluruh halaman.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Provider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-redux&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./redux/store&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;MainApp&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./MainApp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;store&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MainApp&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  File 2: MainApp.jsx
&lt;/h2&gt;

&lt;p&gt;Mengatur navigasi HomeScreen dan Cart menggunakan React Navigation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NavigationContainer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createStackNavigator&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/stack&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;HomeScreen&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./screens/HomeScreen&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Cart&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./screens/Cart&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createStackNavigator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MainApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Home"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;HomeScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Daftar Produk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Cart"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Cart&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Keranjang Belanja&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  File 3: redux/store.js
&lt;/h2&gt;

&lt;p&gt;Store Redux yang berisi seluruh state global.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;configureStore&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@reduxjs/toolkit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;cartReducer&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./cartSlice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;configureStore&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cartReducer&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  File 4: redux/cartSlice.js
&lt;/h2&gt;

&lt;p&gt;Mengelola data keranjang: menambah dan menghapus item.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createSlice&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@reduxjs/toolkit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cartSlice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createSlice&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cart&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;initialState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;reducers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;addItem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;addItem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;removeItem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;cartSlice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;actions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;cartSlice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  File 5: screens/HomeScreen.jsx
&lt;/h2&gt;

&lt;p&gt;Halaman utama, menampilkan produk dan tombol tambah ke Redux state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useDispatch&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-redux&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;addItem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../redux/cartSlice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HomeScreen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;navigation&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useDispatch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Headphone&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Handphone&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;marginBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Daftar Produk&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;marginBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;
            &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Tambah ke Keranjang"&lt;/span&gt;
            &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;addItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;

      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Lihat Keranjang"&lt;/span&gt;
        &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;navigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cart&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  File 6: screens/Cart.jsx
&lt;/h2&gt;

&lt;p&gt;Menampilkan isi keranjang yang disimpan di Redux.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useSelector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useDispatch&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-redux&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;removeItem&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../redux/cartSlice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Cart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSelector&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useDispatch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;marginBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Keranjang Belanja&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Keranjang masih kosong&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;marginBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;
              &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Hapus"&lt;/span&gt;
              &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  8. Penjelasan Alur Kerjanya
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;User berada di HomeScreen.&lt;/li&gt;
&lt;li&gt;User menekan tombol “Tambah ke Keranjang”.&lt;/li&gt;
&lt;li&gt;HomeScreen memanggil:
&lt;code&gt;dispatch(addItem("Headphone"))&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Redux memasukkan item ke state global &lt;code&gt;cart.items&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ketika membuka halaman Cart:
&lt;code&gt;useSelector(state =&amp;gt; state.cart.items)&lt;/code&gt;
otomatis mengambil isi keranjang dari Redux.&lt;/li&gt;
&lt;li&gt;Halaman Cart langsung menampilkan isi keranjang tanpa props.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ini menunjukkan bagaimana Redux membuat data bisa dipakai banyak halaman secara konsisten.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Menjalankan Proyek
&lt;/h1&gt;

&lt;p&gt;Instal semua dependency:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @reduxjs/toolkit react-redux
npm install @react-navigation/native
npm install @react-navigation/stack
npm install react-native-screens react-native-safe-area-context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika memakai Expo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;expo install react-native-screens react-native-safe-area-context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>reactnative</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Mengenal React Navigation di React Native</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Fri, 21 Nov 2025 07:47:35 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/mengenal-react-navigation-di-react-native-imb</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/mengenal-react-navigation-di-react-native-imb</guid>
      <description>&lt;p&gt;React Native digunakan untuk membuat aplikasi mobile berbasis JavaScript. Tetapi untuk membuat aplikasi yang memiliki &lt;strong&gt;banyak halaman&lt;/strong&gt;, kita butuh &lt;em&gt;navigator&lt;/em&gt;.&lt;br&gt;
Di sinilah &lt;strong&gt;React Navigation&lt;/strong&gt; sangat membantu.&lt;/p&gt;

&lt;p&gt;Pada materi ini, kita akan belajar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Apa itu React Navigation&lt;/li&gt;
&lt;li&gt;Cara kerja React Navigation&lt;/li&gt;
&lt;li&gt;Implementasi Stack Navigation&lt;/li&gt;
&lt;li&gt;Implementasi Tab Navigation&lt;/li&gt;
&lt;li&gt;Implementasi Drawer Navigation&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  1. Apa itu React Navigation?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React Navigation&lt;/strong&gt; adalah library yang digunakan di React Native untuk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pindah antar halaman&lt;/li&gt;
&lt;li&gt;Membuat navigasi berbasis tab&lt;/li&gt;
&lt;li&gt;Membuat menu samping (drawer)&lt;/li&gt;
&lt;li&gt;Mengatur header, parameter, dan state antar halaman&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Library ini paling populer karena:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mudah digunakan&lt;/li&gt;
&lt;li&gt;Dokumentasi lengkap&lt;/li&gt;
&lt;li&gt;Cocok untuk kebanyakan aplikasi mobile&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  2. Konsep Utama React Navigation
&lt;/h2&gt;

&lt;p&gt;React Navigation terdiri dari beberapa navigator:&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;a) Stack Navigator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Navigasi &lt;em&gt;bertumpuk&lt;/em&gt; seperti halaman pada browser.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Halaman baru ditaruh di atas stack&lt;/li&gt;
&lt;li&gt;Ada fitur "Back"&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;b) Bottom Tab Navigator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Navigasi dalam bentuk bar di bawah aplikasi.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Biasanya untuk menu utama&lt;/li&gt;
&lt;li&gt;Contoh: Home, Search, Profile&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;c) Drawer Navigator&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Menu geser dari samping kiri.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cocok untuk aplikasi dengan banyak menu&lt;/li&gt;
&lt;li&gt;Contoh: aplikasi email, marketplace&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Cara Kerja Umum&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install react-navigation dan dependensinya&lt;/li&gt;
&lt;li&gt;Bungkus aplikasi dengan &lt;code&gt;&amp;lt;NavigationContainer&amp;gt;&lt;/code&gt; (penggunaan NavigationContainer cukup pada satu file saja, jika lebih dari 2 file terdapat deklarasi &lt;code&gt;&amp;lt;NavigationContainer&amp;gt;&lt;/code&gt; maka akan muncul error). Namun seandainya jika Anda mendeklarasikan &lt;code&gt;&amp;lt;NavigationContainer&amp;gt;&lt;/code&gt; ini pada lebih dari 1 file maka &lt;code&gt;&amp;lt;NavigationContainer&amp;gt;&lt;/code&gt; wajib dibungkus dengan &lt;code&gt;NavigationIndependentTree&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Buat navigator (stack/tab/drawer)&lt;/li&gt;
&lt;li&gt;Daftarkan screen ke dalam navigator&lt;/li&gt;
&lt;li&gt;Gunakan &lt;code&gt;navigation.navigate("ScreenName")&lt;/code&gt; untuk pindah halaman&lt;/li&gt;
&lt;/ol&gt;


&lt;h1&gt;
  
  
  3. Instalasi React Navigation
&lt;/h1&gt;

&lt;p&gt;Jalankan pada terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @react-navigation/native
npm &lt;span class="nb"&gt;install &lt;/span&gt;react-native-screens react-native-safe-area-context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install stack navigator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @react-navigation/stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install tab navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @react-navigation/bottom-tabs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install drawer navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @react-navigation/drawer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  4. Implementasi React Navigation
&lt;/h1&gt;




&lt;h2&gt;
  
  
  4.1 Stack Navigation (Pindah Antar Halaman)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;App.jsx&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NavigationIndependentTree&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createStackNavigator&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/stack&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HomeScreen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;navigation&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Ini Halaman Home&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Ke Detail"&lt;/span&gt; &lt;span class="na"&gt;onPress&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;navigation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;navigate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Detail&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;DetailScreen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Ini Halaman Detail&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createStackNavigator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Home"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;HomeScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Detail"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;DetailScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4.2 Bottom Tab Navigation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;App.jsx&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NavigationIndependentTree&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBottomTabNavigator&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/bottom-tabs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;IconSymbol&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/components/ui/icon-symbol&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/*sumber antdesain : https://icons.expo.fyi/Index*/&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AntDesign&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@expo/vector-icons/AntDesign&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HomeScreen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;navigation&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Ini Halaman Home&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProfileScreen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Ini Halaman Profile&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Tab&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createBottomTabNavigator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Tab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Tab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Home"&lt;/span&gt;
            &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;HomeScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Home&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;tabBarIcon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;IconSymbol&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"house.fill"&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;,&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Tab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Profile"&lt;/span&gt;
            &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ProfileScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;tabBarIcon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AntDesign&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"user"&lt;/span&gt; &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"black"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;,&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Tab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4.3 Drawer Navigation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;App.jsx&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createDrawerNavigator&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/drawer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NavigationContainer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@react-navigation/native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;View&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-native&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HomeScreen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Ini Halaman Home&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SettingsScreen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Ini Halaman Setting&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Drawer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createDrawerNavigator&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Drawer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Drawer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Home"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;HomeScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Drawer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Screen&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Settings"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;SettingsScreen&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Drawer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Navigator&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationContainer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;NavigationIndependentTree&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>reactnative</category>
      <category>beginners</category>
    </item>
    <item>
      <title>06. Styling React Native Components</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Mon, 27 Oct 2025 05:01:10 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/06-styling-react-native-components-1el3</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/06-styling-react-native-components-1el3</guid>
      <description>&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Saat membangun aplikasi mobile dengan &lt;strong&gt;React Native&lt;/strong&gt;, tampilan antarmuka (UI) adalah hal yang sangat penting.&lt;br&gt;
React Native menyediakan cara mudah untuk &lt;strong&gt;memberi gaya (styling)&lt;/strong&gt; pada setiap komponen agar tampak menarik dan konsisten.&lt;/p&gt;

&lt;p&gt;Pada materi ini, kita akan membahas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Konsep Styling Components di React Native&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konsep Flexbox untuk Pengaturan Layout&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Membuat Layout Berdasarkan Desain&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  A. Konsep Styling Components di React Native
&lt;/h2&gt;

&lt;p&gt;React Native menggunakan sistem styling yang mirip dengan &lt;strong&gt;CSS&lt;/strong&gt;, tetapi ditulis dalam bentuk &lt;strong&gt;JavaScript object&lt;/strong&gt;.&lt;br&gt;
Artinya, kita menuliskan gaya (style) langsung di dalam file &lt;code&gt;.js&lt;/code&gt; atau &lt;code&gt;.jsx&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Contoh sederhana:&lt;br&gt;
&lt;/p&gt;

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

export default function App() {
  return (
    &amp;lt;View style={styles.container}&amp;gt;
      &amp;lt;Text style={styles.title}&amp;gt;Halo React Native!&amp;lt;/Text&amp;gt;
      &amp;lt;Text style={styles.subtitle}&amp;gt;Styling membuat tampilan lebih menarik&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
    backgroundColor: "#f0f0f0",
  },
  title: {
    fontSize: 24,
    fontWeight: "bold",
    color: "#333",
  },
  subtitle: {
    fontSize: 16,
    color: "gray",
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Penjelasan:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;StyleSheet.create()&lt;/code&gt; digunakan untuk mendefinisikan kumpulan gaya.&lt;/li&gt;
&lt;li&gt;Properti seperti &lt;code&gt;fontSize&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;backgroundColor&lt;/code&gt;, &lt;code&gt;margin&lt;/code&gt;, &lt;code&gt;padding&lt;/code&gt;, dan lainnya mirip seperti di CSS.&lt;/li&gt;
&lt;li&gt;Styling diterapkan ke komponen dengan menambahkan &lt;code&gt;style={styles.namaStyle}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  B. Konsep Flexbox
&lt;/h2&gt;

&lt;p&gt;React Native menggunakan &lt;strong&gt;Flexbox&lt;/strong&gt; untuk mengatur posisi dan ukuran elemen pada layar.&lt;br&gt;
Dengan Flexbox, kita bisa dengan mudah membuat tampilan responsif tanpa perlu menghitung posisi secara manual.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔹 Properti Flexbox yang sering digunakan:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Properti&lt;/th&gt;
&lt;th&gt;Fungsi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;flexDirection&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mengatur arah elemen (&lt;code&gt;row&lt;/code&gt; = horizontal, &lt;code&gt;column&lt;/code&gt; = vertikal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;justifyContent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mengatur posisi elemen secara &lt;strong&gt;vertikal/horizontal&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;alignItems&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mengatur posisi elemen secara &lt;strong&gt;sejajar melintang&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;flex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mengatur seberapa besar ruang yang diambil oleh elemen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Memberi jarak antar elemen (fitur baru React Native)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Contoh:
&lt;/h3&gt;

&lt;p&gt;Menampilkan tiga kotak sejajar horizontal dengan jarak sama rata.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import { View } from "react-native";

export default function App() {
  return (
    &amp;lt;View
      style={{
        flex: 1,
        justifyContent: "center",
        alignItems: "center",
      }}
    &amp;gt;
      &amp;lt;View
        style={{
          flexDirection: "row",
          justifyContent: "space-between",
          width: 250,
        }}
      &amp;gt;
        &amp;lt;View style={{ width: 60, height: 60, backgroundColor: "red" }} /&amp;gt;
        &amp;lt;View style={{ width: 60, height: 60, backgroundColor: "green" }} /&amp;gt;
        &amp;lt;View style={{ width: 60, height: 60, backgroundColor: "blue" }} /&amp;gt;
      &amp;lt;/View&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Penjelasan:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;flexDirection: "row"&lt;/code&gt; → menata elemen secara horizontal.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;justifyContent: "space-between"&lt;/code&gt; → memberi jarak sama antar kotak.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;alignItems: "center"&lt;/code&gt; → memposisikan elemen sejajar secara vertikal di tengah.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  C. Membuat Layout Berdasarkan Desain di React Native
&lt;/h2&gt;

&lt;p&gt;Ketika kita mendapatkan &lt;strong&gt;desain UI&lt;/strong&gt; dari Figma atau XD, kita dapat menerjemahkannya menjadi &lt;strong&gt;layout React Native&lt;/strong&gt; dengan memanfaatkan kombinasi &lt;strong&gt;View&lt;/strong&gt;, &lt;strong&gt;Flexbox&lt;/strong&gt;, dan &lt;strong&gt;StyleSheet&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh Desain Sederhana:
&lt;/h3&gt;

&lt;p&gt;Tampilan profil pengguna:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Foto Profil ]
Nama: Andi Pratama
Deskripsi: Mahasiswa Mobile Programming
[ Tombol Edit Profil ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Implementasi Layout-nya:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import { View, Text, Image, Button, StyleSheet } from "react-native";

export default function Profile() {
  return (
    &amp;lt;View style={styles.container}&amp;gt;
      &amp;lt;Image
        source={{ uri: "https://via.placeholder.com/100" }}
        style={styles.avatar}
      /&amp;gt;
      &amp;lt;Text style={styles.name}&amp;gt;Andi Pratama&amp;lt;/Text&amp;gt;
      &amp;lt;Text style={styles.description}&amp;gt;
        Mahasiswa Mobile Programming, semester 5
      &amp;lt;/Text&amp;gt;
      &amp;lt;View style={styles.button}&amp;gt;
        &amp;lt;Button title="Edit Profil" color="#007AFF" /&amp;gt;
      &amp;lt;/View&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center",
    padding: 20,
    backgroundColor: "#fff",
  },
  avatar: {
    width: 100,
    height: 100,
    borderRadius: 50,
    marginBottom: 20,
  },
  name: {
    fontSize: 22,
    fontWeight: "bold",
    color: "#333",
  },
  description: {
    textAlign: "center",
    color: "gray",
    marginVertical: 10,
  },
  button: {
    width: "60%",
    marginTop: 20,
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Penjelasan:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Image&lt;/code&gt; digunakan untuk menampilkan foto profil.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Text&lt;/code&gt; untuk menampilkan nama dan deskripsi.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;View&lt;/code&gt; digunakan sebagai wadah untuk menyusun elemen-elemen di layar.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Button&lt;/code&gt; ditempatkan di dalam &lt;code&gt;View&lt;/code&gt; agar mudah diatur lebarnya.&lt;/li&gt;
&lt;li&gt;Semua elemen diberi &lt;strong&gt;style&lt;/strong&gt; sesuai desain UI.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Konsep&lt;/th&gt;
&lt;th&gt;Penjelasan Singkat&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styling Components&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mengatur tampilan komponen menggunakan &lt;code&gt;StyleSheet&lt;/code&gt; (mirip CSS).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mengatur posisi dan tata letak elemen dengan mudah dan responsif.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Layout Berdasarkan Desain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menerjemahkan desain UI (misal dari Figma) ke dalam kode React Native.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Dengan menguasai &lt;strong&gt;styling&lt;/strong&gt; dan &lt;strong&gt;layout&lt;/strong&gt;, kamu dapat membuat tampilan aplikasi yang menarik, rapi, dan responsif di berbagai ukuran layar.&lt;/p&gt;




</description>
      <category>reactnative</category>
      <category>tutorial</category>
      <category>ui</category>
    </item>
    <item>
      <title>LATIHAN ANTARMUKA</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Mon, 20 Oct 2025 11:09:05 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-antarmuka-4gdm</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-antarmuka-4gdm</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Latihan 1: TextInput dan State&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal
&lt;/h3&gt;

&lt;p&gt;Buat aplikasi React Native yang memiliki:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Satu komponen &lt;code&gt;TextInput&lt;/code&gt; untuk mengetik nama.&lt;/li&gt;
&lt;li&gt;Menampilkan teks “Halo, [nama]!” secara otomatis ketika pengguna mengetik.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contoh tampilan:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m777k62cx420ou8irpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m777k62cx420ou8irpm.png" alt=" " width="451" height="820"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Latihan 2: ScrollView&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal
&lt;/h3&gt;

&lt;p&gt;Buat tampilan yang menampilkan &lt;strong&gt;20 teks berbeda&lt;/strong&gt; menggunakan &lt;code&gt;ScrollView&lt;/code&gt; agar dapat di-scroll secara vertikal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; Gunakan perulangan array &lt;code&gt;[...Array(20)]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh tampilan:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuiq7rvu9e5q5cvycfdhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuiq7rvu9e5q5cvycfdhb.png" alt=" " width="475" height="825"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Latihan 3: FlatList&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal
&lt;/h3&gt;

&lt;p&gt;Buat aplikasi yang menampilkan daftar produk menggunakan &lt;strong&gt;FlatList&lt;/strong&gt; dengan data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
  { id: '1', nama: 'Laptop' },
  { id: '2', nama: 'Keyboard' },
  { id: '3', nama: 'Mouse' },
  { id: '4', nama: 'Monitor' }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setiap item ditampilkan dalam &lt;code&gt;Text&lt;/code&gt; dengan garis pemisah di bawahnya.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh tampilan:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4latbe9krihg2cry27fg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4latbe9krihg2cry27fg.png" alt=" " width="413" height="815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Latihan 4: Layout Flexbox&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal
&lt;/h3&gt;

&lt;p&gt;Buat layout sederhana yang menampilkan &lt;strong&gt;3 kotak warna&lt;/strong&gt; sejajar horizontal (baris) dengan jarak antar elemen sama rata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh tampilan:&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyc6t51p05yv5uu2zyq8.png" alt=" " width="437" height="817"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Latihan 5 (Mini Project): Aplikasi Daftar Nama Mahasiswa&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal
&lt;/h3&gt;

&lt;p&gt;Buat aplikasi kecil yang memiliki fitur:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Aplikasi memiliki input teks (&lt;code&gt;TextInput&lt;/code&gt;) untuk menulis nama mahasiswa.&lt;/li&gt;
&lt;li&gt;Terdapat tombol &lt;strong&gt;"Tambah"&lt;/strong&gt; yang berfungsi menambahkan nama ke daftar.&lt;/li&gt;
&lt;li&gt;Daftar nama ditampilkan menggunakan &lt;strong&gt;FlatList&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Jika jumlah data lebih dari 10, daftar dapat di-&lt;strong&gt;scroll&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Gunakan &lt;strong&gt;Flexbox&lt;/strong&gt; untuk mengatur tata letak antara komponen input dan tombol agar sejajar secara horizontal.&lt;/li&gt;
&lt;li&gt;Gunakan &lt;code&gt;View&lt;/code&gt; sebagai container utama dengan padding dan margin yang sesuai agar tampilan lebih rapi.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Contoh tampilan:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcenal5w2rsh79ede8mmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcenal5w2rsh79ede8mmm.png" alt=" " width="458" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>ui</category>
    </item>
    <item>
      <title>LATIHAN SOAL (jsx, props, state dan hooks)</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Mon, 20 Oct 2025 10:41:08 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-soal-jsx-props-state-dan-hooks-4o60</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-soal-jsx-props-state-dan-hooks-4o60</guid>
      <description>&lt;h2&gt;
  
  
  Latihan Soal
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal 1 – JSX
&lt;/h3&gt;

&lt;p&gt;Buatlah komponen bernama &lt;strong&gt;WelcomeApp&lt;/strong&gt; yang menampilkan teks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Selamat datang di React Native!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gunakan komponen &lt;code&gt;&amp;lt;View&amp;gt;&lt;/code&gt; dan &lt;code&gt;&amp;lt;Text&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;contoh output : &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fizx7z2xqnr9g5orcdbih.png" alt=" " width="462" height="822"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal 2 – Props
&lt;/h3&gt;

&lt;p&gt;Buat komponen bernama &lt;strong&gt;ProfileCard&lt;/strong&gt; yang menerima props:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nama&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jurusan&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lalu tampilkan teks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nama: Dita
Jurusan: Bisnis Digital
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;contoh output :&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9gzysc2t8tbbc1vuz4k.png" alt=" " width="442" height="817"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal 3 – State
&lt;/h3&gt;

&lt;p&gt;Buat aplikasi penghitung sederhana dengan tombol &lt;strong&gt;Tambah&lt;/strong&gt; dan &lt;strong&gt;Reset&lt;/strong&gt;.&lt;br&gt;
Gunakan &lt;code&gt;useState&lt;/code&gt; untuk menyimpan nilai hitungan.&lt;/p&gt;

&lt;p&gt;contoh output :&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7yfyfg79n3uchr0j93bu.png" alt=" " width="462" height="836"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Soal 4 – Hooks
&lt;/h3&gt;

&lt;p&gt;Buat komponen bernama &lt;strong&gt;TimerApp&lt;/strong&gt; yang menampilkan waktu berjalan (detik) menggunakan &lt;code&gt;useEffect&lt;/code&gt; dan &lt;code&gt;useState&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;contoh output:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu30bxjs7ae5aacbdulx.png" alt=" " width="455" height="826"&gt;
&lt;/h2&gt;

</description>
    </item>
    <item>
      <title>05. Mengenal Fungsi Dasar Interaksi dan Struktur Antarmuka di React Native</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Mon, 20 Oct 2025 03:37:24 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/05-mengenal-fungsi-dasar-interaksi-dan-struktur-antarmuka-di-react-native-12dk</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/05-mengenal-fungsi-dasar-interaksi-dan-struktur-antarmuka-di-react-native-12dk</guid>
      <description>&lt;h1&gt;
  
  
  Pengenalan Fungsi Dasar Interaksi &amp;amp; Struktur Antarmuka di React Native
&lt;/h1&gt;

&lt;p&gt;Pada materi kali ini, kita akan belajar &lt;strong&gt;cara membuat antarmuka dan interaksi dasar di React Native&lt;/strong&gt;, meliputi:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fungsi dasar interaksi React Native (&lt;code&gt;TextInput&lt;/code&gt;, &lt;code&gt;ScrollView&lt;/code&gt;, &lt;code&gt;ListView&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Struktur pembangun antarmuka React Native&lt;/li&gt;
&lt;li&gt;Membuat layout antarmuka sederhana&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Fungsi Dasar Interaksi React Native
&lt;/h2&gt;

&lt;p&gt;React Native menyediakan berbagai komponen bawaan untuk berinteraksi dengan pengguna.&lt;br&gt;&lt;br&gt;
Tiga komponen dasar yang paling sering digunakan adalah:&lt;/p&gt;
&lt;h3&gt;
  
  
  a. TextInput
&lt;/h3&gt;

&lt;p&gt;Digunakan untuk menerima &lt;strong&gt;input teks dari pengguna&lt;/strong&gt;, seperti form login, komentar, atau pencarian.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

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

export default function TextInputExample() {
  const [nama, setNama] = useState("");

  return (
    &amp;lt;View style={{ padding: 20 }}&amp;gt;
      &amp;lt;Text&amp;gt;Masukkan Nama Anda:&amp;lt;/Text&amp;gt;
      &amp;lt;TextInput
        style={{
          borderWidth: 1,
          borderColor: "#ccc",
          borderRadius: 5,
          padding: 10,
          marginTop: 10,
        }}
        placeholder="Ketik di sini..."
        onChangeText={(text) =&amp;gt; setNama(text)}
      /&amp;gt;
      &amp;lt;Text style={{ marginTop: 10 }}&amp;gt;Halo, {nama}!&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;TextInput&lt;/code&gt; menerima teks dari pengguna.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onChangeText&lt;/code&gt; digunakan untuk menangkap nilai input.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useState&lt;/code&gt; menyimpan teks yang dimasukkan.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  b. ScrollView
&lt;/h3&gt;

&lt;p&gt;Digunakan untuk &lt;strong&gt;menggulung (scroll)&lt;/strong&gt; tampilan secara vertikal atau horizontal.&lt;br&gt;
Sangat berguna jika konten di layar cukup panjang.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import { ScrollView, Text } from "react-native";

export default function ScrollViewExample() {
  return (
    &amp;lt;ScrollView style={{ padding: 20 }}&amp;gt;
      {[...Array(20)].map((_, i) =&amp;gt; (
        &amp;lt;Text key={i} style={{ marginVertical: 10 }}&amp;gt;
          Ini item ke-{i + 1}
        &amp;lt;/Text&amp;gt;
      ))}
    &amp;lt;/ScrollView&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ScrollView&lt;/code&gt; menampung elemen yang panjang.&lt;/li&gt;
&lt;li&gt;Gunakan &lt;code&gt;map()&lt;/code&gt; untuk menampilkan banyak teks dalam satu tampilan.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  c. ListView (FlatList)
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;FlatList&lt;/code&gt; digunakan untuk menampilkan &lt;strong&gt;daftar data (list)&lt;/strong&gt; secara efisien.&lt;br&gt;
Ini adalah versi modern dari &lt;code&gt;ListView&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import { View, Text, FlatList } from "react-native";

const dataMahasiswa = [
  { id: "1", nama: "Dita" },
  { id: "2", nama: "Andi" },
  { id: "3", nama: "Rina" },
];

export default function FlatListExample() {
  return (
    &amp;lt;FlatList
      data={dataMahasiswa}
      keyExtractor={(item) =&amp;gt; item.id}
      renderItem={({ item }) =&amp;gt; (
        &amp;lt;View
          style={{
            padding: 15,
            borderBottomWidth: 1,
            borderBottomColor: "#ddd",
          }}
        &amp;gt;
          &amp;lt;Text&amp;gt;{item.nama}&amp;lt;/Text&amp;gt;
        &amp;lt;/View&amp;gt;
      )}
    /&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;data&lt;/code&gt; berisi array daftar data.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;renderItem&lt;/code&gt; digunakan untuk menampilkan setiap item dalam daftar.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keyExtractor&lt;/code&gt; memberikan ID unik untuk setiap elemen.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Struktur Pembangun Antarmuka di React Native
&lt;/h2&gt;

&lt;p&gt;Aplikasi React Native disusun menggunakan &lt;strong&gt;komponen&lt;/strong&gt;.&lt;br&gt;
Komponen-komponen ini bisa dibayangkan seperti &lt;strong&gt;“kepingan Lego”&lt;/strong&gt; yang disusun menjadi satu tampilan.&lt;/p&gt;

&lt;p&gt;Struktur dasarnya terdiri dari:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Komponen&lt;/th&gt;
&lt;th&gt;Fungsi&lt;/th&gt;
&lt;th&gt;Contoh&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;View&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Wadah utama atau kontainer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;View&amp;gt;...&amp;lt;/View&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menampilkan teks&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Text&amp;gt;Halo Dunia&amp;lt;/Text&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menampilkan gambar&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Image source={...} /&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Button&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tombol interaksi&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Button title="Klik" /&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TextInput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Input teks dari pengguna&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;TextInput /&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Contoh struktur dasar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import { View, Text, Button } from "react-native";

export default function StrukturDasar() {
  return (
    &amp;lt;View style={{ padding: 20 }}&amp;gt;
      &amp;lt;Text&amp;gt;Halo, ini struktur antarmuka dasar React Native!&amp;lt;/Text&amp;gt;
      &amp;lt;Button title="Klik Saya" onPress={() =&amp;gt; alert("Tombol diklik!")} /&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Membuat Layout Antarmuka Sederhana
&lt;/h2&gt;

&lt;p&gt;Untuk mengatur tata letak antarmuka, React Native menggunakan sistem &lt;strong&gt;Flexbox&lt;/strong&gt; — sama seperti di CSS.&lt;br&gt;
Dengan Flexbox, kita bisa mengatur arah, posisi, dan ukuran elemen dengan mudah.&lt;/p&gt;

&lt;p&gt;Contoh Layout Sederhana:&lt;br&gt;
&lt;/p&gt;

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

export default function LayoutSederhana() {
  return (
    &amp;lt;View style={styles.container}&amp;gt;
      &amp;lt;View style={styles.box1}&amp;gt;
        &amp;lt;Text&amp;gt;Header&amp;lt;/Text&amp;gt;
      &amp;lt;/View&amp;gt;
      &amp;lt;View style={styles.box2}&amp;gt;
        &amp;lt;Text&amp;gt;Konten Utama&amp;lt;/Text&amp;gt;
      &amp;lt;/View&amp;gt;
      &amp;lt;View style={styles.box3}&amp;gt;
        &amp;lt;Text&amp;gt;Footer&amp;lt;/Text&amp;gt;
      &amp;lt;/View&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 10,
  },
  box1: {
    flex: 1,
    backgroundColor: "#FFD700",
    justifyContent: "center",
    alignItems: "center",
  },
  box2: {
    flex: 3,
    backgroundColor: "#ADD8E6",
    justifyContent: "center",
    alignItems: "center",
  },
  box3: {
    flex: 1,
    backgroundColor: "#90EE90",
    justifyContent: "center",
    alignItems: "center",
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;flex: 1&lt;/code&gt; artinya ruang dibagi proporsional berdasarkan nilai &lt;code&gt;flex&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;justifyContent&lt;/code&gt; dan &lt;code&gt;alignItems&lt;/code&gt; digunakan untuk mengatur posisi elemen.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;StyleSheet.create()&lt;/code&gt; digunakan untuk membuat style terpisah agar kode rapi.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Konsep&lt;/th&gt;
&lt;th&gt;Fungsi&lt;/th&gt;
&lt;th&gt;Komponen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TextInput&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menerima input teks dari pengguna&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TextInput&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ScrollView&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menampilkan konten panjang yang bisa digulung&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ScrollView&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ListView / FlatList&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menampilkan daftar data secara efisien&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FlatList&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;View, Text, Image&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Penyusun utama antarmuka&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mengatur layout dan posisi elemen&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;flex&lt;/code&gt;, &lt;code&gt;justifyContent&lt;/code&gt;, &lt;code&gt;alignItems&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




</description>
      <category>reactnative</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>ui</category>
    </item>
    <item>
      <title>TUGAS (komponen dasar)</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Mon, 13 Oct 2025 11:44:46 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-soal-komponen-dasar-k2a</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/latihan-soal-komponen-dasar-k2a</guid>
      <description>&lt;h2&gt;
  
  
  Soal 1 – Functional &amp;amp; Class Component
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tugas:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Buat dua versi komponen yang menampilkan teks &lt;strong&gt;“Halo, Komponen Dasar!”&lt;/strong&gt;, yaitu:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Versi &lt;strong&gt;Functional Component&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Versi &lt;strong&gt;Class Component&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh output :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1y759phegmrrn4t2fvwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1y759phegmrrn4t2fvwf.png" alt=" " width="452" height="822"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Soal 2 – Menggabungkan Komponen
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tugas:&lt;/strong&gt;&lt;br&gt;
Buat komponen &lt;code&gt;Header&lt;/code&gt; dan &lt;code&gt;Footer&lt;/code&gt;.&lt;br&gt;
Lalu dalam komponen &lt;code&gt;AppMain&lt;/code&gt;, render &lt;code&gt;Header&lt;/code&gt; di atas, &lt;code&gt;Footer&lt;/code&gt; di bawah, dan teks di tengah: &lt;strong&gt;“Selamat Datang!”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Contoh Output :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9idtqss01815i59ntmfv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9idtqss01815i59ntmfv.png" alt=" " width="347" height="587"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Soal 3 – Props dalam Komponen
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tugas:&lt;/strong&gt;&lt;br&gt;
Buat komponen &lt;code&gt;UserCard&lt;/code&gt; yang menerima props &lt;code&gt;nama&lt;/code&gt; dan &lt;code&gt;umur&lt;/code&gt;, lalu menampilkan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nama: [nama]
Umur: [umur] tahun
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gunakan &lt;code&gt;UserCard&lt;/code&gt; dalam sebuah komponen utama (&lt;code&gt;AppUser&lt;/code&gt;) dengan contoh data.&lt;/p&gt;

&lt;p&gt;Contoh output :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1k8rk6ji9w2oqwgsilr4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1k8rk6ji9w2oqwgsilr4.png" alt=" " width="352" height="517"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Soal 4 – Komponen Dasar React Native
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tugas:&lt;/strong&gt;&lt;br&gt;
Gunakan komponen dasar React Native — seperti &lt;code&gt;View&lt;/code&gt;, &lt;code&gt;Text&lt;/code&gt;, &lt;code&gt;Image&lt;/code&gt;, dan &lt;code&gt;ScrollView&lt;/code&gt; — untuk membuat tampilan sederhana:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Header teks&lt;/li&gt;
&lt;li&gt;Beberapa gambar dalam scroll vertikal&lt;/li&gt;
&lt;li&gt;Footer teks kecil&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh output :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz920glwqh26lypioodx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz920glwqh26lypioodx5.png" alt=" " width="401" height="818"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Soal 5 – Kombinasi (Functional + Props + Komponen Dasar)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tugas:&lt;/strong&gt;&lt;br&gt;
Buat komponen &lt;code&gt;Profile&lt;/code&gt; yang menampilkan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gambar profil menggunakan &lt;code&gt;Image&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Nama pengguna dan bio sebagai props&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Susun agar tampil rapi (gambar + teks di atas atau samping).&lt;/p&gt;

&lt;p&gt;Contoh output :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhr76htka8hpz8kyrnl8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhr76htka8hpz8kyrnl8.png" alt=" " width="346" height="447"&gt;&lt;/a&gt;&lt;/p&gt;




</description>
    </item>
    <item>
      <title>04. Pengenalan JSX, Props, State, dan Hooks di React Native</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Sat, 11 Oct 2025 14:29:15 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/04-pengenalan-jsx-props-state-dan-hooks-di-react-native-aoa</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/04-pengenalan-jsx-props-state-dan-hooks-di-react-native-aoa</guid>
      <description>&lt;p&gt;Pada materi kali ini, kita akan membahas &lt;strong&gt;empat konsep penting&lt;/strong&gt; dalam React Native yang menjadi dasar dari semua aplikasi modern, yaitu:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JSX
&lt;/li&gt;
&lt;li&gt;Props
&lt;/li&gt;
&lt;li&gt;State
&lt;/li&gt;
&lt;li&gt;Hooks
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Konsep JSX di React Native
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apa itu JSX?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;JSX (JavaScript XML)&lt;/strong&gt; adalah cara menulis kode React yang &lt;strong&gt;menggabungkan JavaScript dan HTML-like syntax&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Dengan JSX, kita bisa menulis tampilan (UI) seperti HTML, tetapi tetap menggunakan kekuatan logika JavaScript.&lt;/p&gt;

&lt;p&gt;Contoh sederhana JSX:&lt;br&gt;
&lt;/p&gt;

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

export default function App() {
  return (
    &amp;lt;View&amp;gt;
      &amp;lt;Text&amp;gt;Halo, React Native!&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;View&amp;gt;&lt;/code&gt; mirip seperti &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; di HTML — wadah utama elemen.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Text&amp;gt;&lt;/code&gt; digunakan untuk menampilkan teks.&lt;/li&gt;
&lt;li&gt;JSX harus &lt;strong&gt;dibungkus dalam satu elemen utama&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Konsep Props di React Native
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apa itu Props?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Props (Properties)&lt;/strong&gt; adalah &lt;strong&gt;cara mengirim data dari komponen induk ke komponen anak.&lt;/strong&gt;&lt;br&gt;
Props bersifat &lt;strong&gt;immutable (tidak bisa diubah dari dalam komponen).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Contoh penggunaan Props:&lt;br&gt;
&lt;/p&gt;

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

function Greeting(props) {
  return (
    &amp;lt;View&amp;gt;
      &amp;lt;Text&amp;gt;Halo, {props.nama}!&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

export default function App() {
  return (
    &amp;lt;View&amp;gt;
      &amp;lt;Greeting nama="Dita" /&amp;gt;
      &amp;lt;Greeting nama="Andi" /&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Komponen &lt;code&gt;Greeting&lt;/code&gt; menerima &lt;code&gt;props.nama&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Nilai &lt;code&gt;nama&lt;/code&gt; dikirim dari komponen &lt;code&gt;App&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Output:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Halo, Dita!
  Halo, Andi!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Props digunakan saat kita ingin membuat komponen yang &lt;strong&gt;dapat digunakan berulang kali dengan data berbeda.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Konsep State di React Native
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apa itu State?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt; adalah &lt;strong&gt;data dinamis&lt;/strong&gt; yang bisa berubah dari waktu ke waktu di dalam komponen.&lt;br&gt;
Biasanya digunakan untuk menyimpan data yang bisa berubah karena interaksi pengguna.&lt;/p&gt;

&lt;p&gt;Untuk menggunakan state, kita memakai &lt;strong&gt;Hook &lt;code&gt;useState&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Contoh penggunaan State:&lt;br&gt;
&lt;/p&gt;

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

export default function CounterApp() {
  const [count, setCount] = useState(0);

  return (
    &amp;lt;View&amp;gt;
      &amp;lt;Text&amp;gt;Jumlah klik: {count}&amp;lt;/Text&amp;gt;
      &amp;lt;Button title="Tambah" onPress={() =&amp;gt; setCount(count + 1)} /&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useState(0)&lt;/code&gt; artinya nilai awal &lt;code&gt;count&lt;/code&gt; adalah 0.&lt;/li&gt;
&lt;li&gt;Saat tombol ditekan, fungsi &lt;code&gt;setCount()&lt;/code&gt; akan menambah nilai &lt;code&gt;count&lt;/code&gt; sebanyak 1.&lt;/li&gt;
&lt;li&gt;Komponen akan &lt;strong&gt;merender ulang&lt;/strong&gt; setiap kali state berubah.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Konsep React Hooks di React Native
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Apa itu Hooks?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Hooks&lt;/strong&gt; adalah fitur pada React (dan React Native) yang memungkinkan kita &lt;strong&gt;menggunakan state dan fitur React lainnya tanpa menulis class component.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beberapa Hooks yang sering digunakan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useState()&lt;/code&gt; → untuk menyimpan data (state).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useEffect()&lt;/code&gt; → untuk menjalankan efek samping seperti memanggil API.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useRef()&lt;/code&gt; → untuk menyimpan referensi elemen.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useContext()&lt;/code&gt; → untuk berbagi data antar komponen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh penggunaan &lt;code&gt;useEffect&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;import React, { useState, useEffect } from "react";
import { View, Text } from "react-native";

export default function Timer() {
  const [seconds, setSeconds] = useState(0);

  useEffect(() =&amp;gt; {
    const timer = setInterval(() =&amp;gt; {
      setSeconds((prev) =&amp;gt; prev + 1);
    }, 1000);

    return () =&amp;gt; clearInterval(timer);
  }, []);

  return (
    &amp;lt;View&amp;gt;
      &amp;lt;Text&amp;gt;Waktu berjalan: {seconds} detik&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjelasan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useEffect&lt;/code&gt; dijalankan saat komponen pertama kali dimuat.&lt;/li&gt;
&lt;li&gt;Setiap 1 detik, &lt;code&gt;setSeconds&lt;/code&gt; menambah 1.&lt;/li&gt;
&lt;li&gt;Saat komponen dihapus, timer dibersihkan.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Konsep&lt;/th&gt;
&lt;th&gt;Fungsi Utama&lt;/th&gt;
&lt;th&gt;Contoh&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menggabungkan tampilan (UI) dan logika JavaScript&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Text&amp;gt;Halo!&amp;lt;/Text&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Props&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mengirim data dari komponen induk ke anak&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;Greeting nama="Andi" /&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menyimpan data yang bisa berubah&lt;/td&gt;
&lt;td&gt;&lt;code&gt;const [count, setCount] = useState(0)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hooks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Menambahkan fitur React ke function component&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;useEffect&lt;/code&gt;, &lt;code&gt;useState&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




</description>
    </item>
    <item>
      <title>03. Struktur Folder React Native</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Sun, 05 Oct 2025 15:41:27 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/03-struktur-folder-react-native-1ik1</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/03-struktur-folder-react-native-1ik1</guid>
      <description>&lt;h1&gt;
  
  
  📁 Memahami Struktur Folder Expo di React Native
&lt;/h1&gt;




&lt;h2&gt;
  
  
  🚀 Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Ketika kamu menjalankan perintah berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-expo-app MyApp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expo akan otomatis membuat sebuah folder proyek bernama &lt;strong&gt;MyApp&lt;/strong&gt;.&lt;br&gt;
Di dalamnya terdapat berbagai folder dan file yang sudah diatur untuk memudahkan pengembangan aplikasi &lt;strong&gt;React Native&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Berikut contoh struktur folder yang terbentuk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MyApp/
├── .expo/
├── .vscode/
├── app/
│   ├── (tabs)/
│   │   ├── _layout.tsx
│   │   ├── explore.tsx
│   │   ├── index.tsx
│   ├── _layout.tsx
│   ├── modal.tsx
├── assets/
│   └── images/
├── components/
│   ├── ui/
│   │   ├── external-link.tsx
│   │   ├── haptic-tab.tsx
│   │   ├── hello-wave.tsx
│   │   ├── parallax-scroll-view.tsx
│   │   ├── themed-text.tsx
│   │   ├── themed-view.tsx
├── constants/
│   ├── theme.ts
├── hooks/
│   ├── use-color-scheme.ts
│   ├── use-color-scheme.web.ts
│   ├── use-theme-color.ts
├── node_modules/
├── scripts/
│   ├── reset-project.js
├── .gitignore
├── app.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧩 Penjelasan Tiap Folder dan File
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;.expo/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Berisi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache proyek&lt;/li&gt;
&lt;li&gt;Metadata hasil build&lt;/li&gt;
&lt;li&gt;File konfigurasi sementara (misalnya data login Expo Go)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Catatan:&lt;/strong&gt; Folder ini dibuat otomatis oleh Expo dan &lt;strong&gt;tidak perlu diubah secara manual&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. &lt;code&gt;.vscode/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Menyimpan pengaturan untuk &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, seperti:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Format kode otomatis (&lt;code&gt;settings.json&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Ekstensi bawaan proyek&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tujuannya agar semua anggota tim memiliki pengaturan editor yang seragam.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. &lt;code&gt;app/&lt;/code&gt; 📱
&lt;/h3&gt;

&lt;p&gt;Inti aplikasi yang berisi semua halaman (&lt;em&gt;screen&lt;/em&gt;) dan komponen utama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File penting di dalamnya:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;_layout.tsx&lt;/code&gt; → Layout global aplikasi&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;index.tsx&lt;/code&gt; → Halaman utama (home screen)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;modal.tsx&lt;/code&gt; → Halaman modal (pop-up)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Subfolder &lt;code&gt;(tabs)/&lt;/code&gt;:&lt;/strong&gt;&lt;br&gt;
Berisi struktur navigasi tab aplikasi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;_layout.tsx&lt;/code&gt; → Layout khusus tab&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;explore.tsx&lt;/code&gt; → Halaman tab “Explore”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;index.tsx&lt;/code&gt; → Halaman tab utama&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  4. &lt;code&gt;assets/images/&lt;/code&gt; 🖼️
&lt;/h3&gt;

&lt;p&gt;Tempat menyimpan file gambar, ikon, atau media lain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;assets/images/logo.png
assets/images/background.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contoh import di kode:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../assets/images/logo.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. &lt;code&gt;components/&lt;/code&gt; ⚛️
&lt;/h3&gt;

&lt;p&gt;Berisi &lt;strong&gt;komponen kustom&lt;/strong&gt; yang digunakan berulang.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh file:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;hello-wave.tsx&lt;/code&gt; → Animasi sapaan&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;haptic-tab.tsx&lt;/code&gt; → Tab dengan efek getar&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;themed-text.tsx&lt;/code&gt;, &lt;code&gt;themed-view.tsx&lt;/code&gt; → Mendukung tema terang/gelap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Subfolder &lt;code&gt;ui/&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Biasanya berisi elemen UI kecil seperti tombol atau link.&lt;/p&gt;


&lt;h3&gt;
  
  
  6. &lt;code&gt;constants/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Berisi nilai tetap (konstanta) yang digunakan di seluruh aplikasi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// constants/theme.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Colors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#ffffff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  7. &lt;code&gt;hooks/&lt;/code&gt; 🔄
&lt;/h3&gt;

&lt;p&gt;Berisi &lt;strong&gt;custom hooks&lt;/strong&gt; — fungsi reusable dengan logika tertentu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;use-color-scheme.ts&lt;/code&gt; → Mendeteksi mode terang/gelap&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;use-theme-color.ts&lt;/code&gt; → Menentukan warna sesuai tema&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contoh penggunaan:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useThemeColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  8. &lt;code&gt;node_modules/&lt;/code&gt; 📦
&lt;/h3&gt;

&lt;p&gt;Tempat semua &lt;strong&gt;dependensi npm&lt;/strong&gt; disimpan.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Jangan ubah folder ini secara manual.&lt;br&gt;
Folder dibuat otomatis saat menjalankan &lt;code&gt;npm install&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  9. &lt;code&gt;scripts/&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Berisi skrip tambahan proyek.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// scripts/reset-project.js&lt;/span&gt;
&lt;span class="c1"&gt;// digunakan untuk menghapus cache dan reset konfigurasi Expo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  10. &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Berisi daftar file dan folder yang tidak disertakan dalam Git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules/
.vscode/
.expo/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  11. &lt;code&gt;app.json&lt;/code&gt; ⚙️
&lt;/h3&gt;

&lt;p&gt;File konfigurasi utama proyek Expo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"expo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MyApp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"slug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"myapp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"orientation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"portrait"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"icon"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./assets/icon.png"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ❓ Kenapa Folder &lt;code&gt;(tabs)&lt;/code&gt; Menggunakan Tanda Kurung?
&lt;/h2&gt;

&lt;p&gt;Expo (khususnya &lt;strong&gt;Expo Router&lt;/strong&gt;) menggunakan tanda kurung &lt;code&gt;( )&lt;/code&gt; untuk mengelompokkan &lt;strong&gt;routes&lt;/strong&gt; tanpa memengaruhi URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artinya:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Folder &lt;code&gt;(tabs)&lt;/code&gt; tidak muncul di URL&lt;/li&gt;
&lt;li&gt;Hanya berfungsi sebagai pengelompokan (&lt;em&gt;grouping&lt;/em&gt;)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
├── (tabs)/
│   ├── index.tsx
│   ├── explore.tsx
│   ├── _layout.tsx
├── settings.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hasil URL:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;index.tsx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;explore.tsx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/explore&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;settings.tsx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/settings&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;📘 Jadi, URL tidak akan menjadi &lt;code&gt;/tabs/explore&lt;/code&gt;, karena &lt;code&gt;(tabs)&lt;/code&gt; hanya untuk grouping.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔄 Jika Tanpa Tanda Kurung
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
├── tabs/
│   ├── index.tsx
│   ├── explore.tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maka URL menjadi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/tabs
/tabs/explore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  📊 Perbandingan
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Folder&lt;/th&gt;
&lt;th&gt;Efek pada URL&lt;/th&gt;
&lt;th&gt;Kegunaan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;(tabs)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Tidak muncul di URL&lt;/td&gt;
&lt;td&gt;Untuk grouping rute&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tabs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Muncul di URL&lt;/td&gt;
&lt;td&gt;Untuk membuat path sebenarnya&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




</description>
      <category>reactnative</category>
      <category>tutorial</category>
      <category>architecture</category>
      <category>beginners</category>
    </item>
    <item>
      <title>02. Instalasi, Konfigurasi Tools &amp; Inisialisasi Project</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Sat, 27 Sep 2025 05:18:17 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/02-instalasi-konfigurasi-tools-29f3</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/02-instalasi-konfigurasi-tools-29f3</guid>
      <description>&lt;p&gt;Persiapan untuk Belajar React Native&lt;br&gt;
Berikut adalah beberapa hal yang perlu disiapkan sebelum mulai belajar React Native:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Menginstal Node.js
Hal pertama yang harus tersedia di komputer adalah Node.js. Node.js merupakan runtime yang memungkinkan eksekusi kode JavaScript di luar browser.
Silahkan gunakan versi 18.20.6, berikut link download aplikasinya : &lt;a href="https://nodejs.org/en/blog/release/v18.20.6" rel="noopener noreferrer"&gt;https://nodejs.org/en/blog/release/v18.20.6&lt;/a&gt; . &lt;strong&gt;CARI yang ekstensinya .msi&lt;/strong&gt;
Jika sudah terinstal maka selanjutnya pastikan Node.js terinstal dengan mengecek versinya dengan memasukkan perintah berikut di cmd
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Menginstal Andorid Studio (Opsional) &lt;br&gt;
Karena size aplikasi ini besar diperbolehkan untuk menginstal atau tidak. &lt;br&gt;
Android studio ini nantinya akan digunakan untuk membuat emulator agar aplikasi bisa diview dalam tampilan mobile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Menginstal React Native&lt;br&gt;
Menggunakan Expo CLI (Mudah, tidak perlu Android Studio)&lt;br&gt;
Jalankan perintah ini di Command Prompt (CMD) atau PowerShell:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g expo-cli

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Jika perintah diatas berhasil dijalankan seharusnya muncul keterangan sebagai berikut :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm WARN deprecated [email protected]: This version of npm is no longer supported.
npm WARN deprecated [email protected]: This version of npm is no longer supported.
npm WARN deprecated [email protected]: This version of npm is no longer supported.
+ [email protected]
added 150 packages from 95 contributors in 12.345s

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, Anda dapat memverifikasi instalasi dengan menjalankan perintah &lt;code&gt;expo --version&lt;/code&gt; untuk memastikan bahwa Expo CLI telah terpasang dengan benar di sistem Anda.&lt;/p&gt;

&lt;p&gt;=====================================================&lt;br&gt;
&lt;strong&gt;INISIALISASI PROJECT&lt;/strong&gt;&lt;br&gt;
Buat sebuah folder, pada contoh ini saya membuat folder dengan nama Kuliah kemudian buka folder tersebut pada VSCODE. &lt;/p&gt;

&lt;p&gt;Setelah folder terbuka pada VSCODE, langkah selanjutnya adalah membuka terminal pada VSCODE kemudian jalan perintah berikut untuk membuat project react native&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-expo-app MyApp

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Berikut adalah tampilan jika sudah berhasil menjalankan perintah diatas&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexyy8l2in8w6ic9p7kms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexyy8l2in8w6ic9p7kms.png" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;setelah itu, jalan perintah &lt;code&gt;cd MyApp&lt;/code&gt; untuk pindah direktori.&lt;/p&gt;

&lt;p&gt;setelah pindah direktori jalankan perintah &lt;code&gt;npm run web&lt;/code&gt; jika ingin aplikasi berjalan pada browser (tanpa HP)&lt;/p&gt;

&lt;p&gt;Berikut tampilannya jika di run pada browser :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fww1c55z7xy4feuyjwyg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fww1c55z7xy4feuyjwyg7.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;atau jalankan perintah &lt;code&gt;npx expo start&lt;/code&gt; jika ingin menjalankan aplikasi pada HP milik kalian dengan cara Instal aplikasi Expo Go di HP Android/IOS kemduian Scan QR Code yang muncul di terminal menggunakan Expo Go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DAFTAR EXTENSIONS YANG PERLU DI INSTAL PADA VS CODE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk6fqulzu1nly0mepyh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk6fqulzu1nly0mepyh8.png" alt=" " width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8kxllgq7evlbqgnjljs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8kxllgq7evlbqgnjljs.png" alt=" " width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>01. Pengenalan Version Control System (VCS), Git, dan GitHub</title>
      <dc:creator>sandatya widhi</dc:creator>
      <pubDate>Tue, 23 Sep 2025 04:43:40 +0000</pubDate>
      <link>https://dev.to/sandatya_widhi_ce7cb1c809/pengenalan-version-control-system-vcs-git-dan-github-289e</link>
      <guid>https://dev.to/sandatya_widhi_ce7cb1c809/pengenalan-version-control-system-vcs-git-dan-github-289e</guid>
      <description>&lt;h1&gt;
  
  
  📌 Pengenalan Version Control System (VCS)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  a. Pengertian VCS
&lt;/h2&gt;

&lt;p&gt;Version Control System (VCS) adalah sebuah sistem yang digunakan untuk mencatat perubahan dari suatu file atau sekumpulan file dalam jangka waktu tertentu. Dengan VCS, kita bisa melihat riwayat perubahan, kembali ke versi sebelumnya, serta memudahkan kerja sama dalam pengembangan proyek.&lt;/p&gt;

&lt;h2&gt;
  
  
  b. Kegunaan VCS
&lt;/h2&gt;

&lt;p&gt;Beberapa manfaat utama dari penggunaan VCS antara lain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Melacak perubahan pada kode atau dokumen.
&lt;/li&gt;
&lt;li&gt;✅ Memungkinkan rollback (kembali ke versi sebelumnya).
&lt;/li&gt;
&lt;li&gt;✅ Mempermudah kolaborasi antar tim developer.
&lt;/li&gt;
&lt;li&gt;✅ Mencegah konflik saat banyak orang mengedit file yang sama.
&lt;/li&gt;
&lt;li&gt;✅ Menyediakan backup terdistribusi.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;ILUSTRASI TANPA VCS&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3043xfyh9jjz5aamlve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3043xfyh9jjz5aamlve.png" alt=" " width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7244cr6umhyaink5of3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7244cr6umhyaink5of3.png" alt=" " width="763" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbcv479pznba6xrws29s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbcv479pznba6xrws29s.png" alt=" " width="747" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ao5ehqga4jbhkxc6arh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ao5ehqga4jbhkxc6arh.png" alt=" " width="759" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2oz4xt0kxfl7rur7oyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy2oz4xt0kxfl7rur7oyu.png" alt=" " width="698" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  c. Beberapa Software VCS
&lt;/h2&gt;

&lt;p&gt;Ada berbagai software VCS yang populer, antara lain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; → paling banyak digunakan saat ini.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subversion (SVN)&lt;/strong&gt; → banyak digunakan di perusahaan lama.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mercurial&lt;/strong&gt; → ringan dan cepat.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perforce&lt;/strong&gt; → biasa digunakan untuk proyek besar (misalnya game development).
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔧 Git VCS
&lt;/h1&gt;

&lt;h2&gt;
  
  
  a. Pengenalan Git
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; adalah software Version Control System yang bersifat &lt;strong&gt;terdistribusi (distributed VCS)&lt;/strong&gt;, diciptakan oleh Linus Torvalds pada tahun 2005. Git memungkinkan setiap developer memiliki salinan penuh dari repository, sehingga tetap bisa bekerja meski tanpa koneksi internet.&lt;/p&gt;

&lt;h2&gt;
  
  
  b. Istilah Penting dalam Git
&lt;/h2&gt;

&lt;p&gt;Berikut adalah beberapa istilah dasar yang sering digunakan dalam Git:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository (Repo)&lt;/strong&gt; → wadah yang menyimpan seluruh file proyek beserta riwayat perubahannya.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit&lt;/strong&gt; → snapshot perubahan yang disimpan ke dalam repository.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branch&lt;/strong&gt; → cabang pengembangan yang memungkinkan kita bekerja pada fitur atau perbaikan tanpa mengganggu branch utama.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge&lt;/strong&gt; → proses menggabungkan perubahan dari satu branch ke branch lain.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clone&lt;/strong&gt; → menyalin repository dari remote server ke komputer lokal.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull&lt;/strong&gt; → mengambil update terbaru dari remote repository.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push&lt;/strong&gt; → mengirim perubahan lokal ke remote repository.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staging Area&lt;/strong&gt; → area sementara untuk menyimpan perubahan sebelum di-commit.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmuijfs6evq0p40epzdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmuijfs6evq0p40epzdh.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonn8monqhv873a0enof0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonn8monqhv873a0enof0.png" alt=" " width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🌐 GitHub
&lt;/h1&gt;

&lt;h2&gt;
  
  
  a. Pengenalan GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; adalah platform hosting berbasis web untuk repository Git. Dengan GitHub, developer dapat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menyimpan proyek secara online.
&lt;/li&gt;
&lt;li&gt;Berkolaborasi dengan tim melalui fitur pull request &amp;amp; issues.
&lt;/li&gt;
&lt;li&gt;Mengelola proyek dengan fitur project board.
&lt;/li&gt;
&lt;li&gt;Menggunakan GitHub Actions untuk automasi CI/CD.
&lt;/li&gt;
&lt;li&gt;Berkontribusi ke proyek open-source dengan mudah.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub bukan hanya tempat menyimpan kode, tapi juga ekosistem kolaborasi bagi jutaan developer di seluruh dunia.  &lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 Kenapa Tidak Pakai Dropbox atau Google Drive?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctg4ticez4f903sb23un.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctg4ticez4f903sb23un.png" alt=" " width="714" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mungkin muncul pertanyaan: &lt;em&gt;“Kenapa harus pakai Git/GitHub? Kenapa tidak pakai Dropbox atau Google Drive saja untuk simpan file proyek?”&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;Jawabannya adalah &lt;strong&gt;Dropbox/Google Drive hanya sekadar cloud storage&lt;/strong&gt;, bukan &lt;em&gt;Version Control System (VCS)&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Berikut perbandingannya:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fitur&lt;/th&gt;
&lt;th&gt;Git/GitHub (VCS) ✅&lt;/th&gt;
&lt;th&gt;Dropbox/Google Drive ❌&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Menyimpan file&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Melacak riwayat perubahan&lt;/td&gt;
&lt;td&gt;Ya (bisa kembali ke versi lama dengan detail commit)&lt;/td&gt;
&lt;td&gt;Terbatas, biasanya hanya versi terakhir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kolaborasi antar developer&lt;/td&gt;
&lt;td&gt;Sangat baik (branch, merge, pull request)&lt;/td&gt;
&lt;td&gt;Tidak ada fitur branch/merge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Menangani konflik perubahan&lt;/td&gt;
&lt;td&gt;Ada mekanisme merge &amp;amp; conflict resolution&lt;/td&gt;
&lt;td&gt;Konflik sering menimpa file (misalnya file &lt;code&gt;doc(1).txt&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automasi &amp;amp; integrasi (CI/CD)&lt;/td&gt;
&lt;td&gt;Bisa dengan GitHub Actions, GitLab CI, dsb.&lt;/td&gt;
&lt;td&gt;Tidak ada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open Source &amp;amp; kontribusi publik&lt;/td&gt;
&lt;td&gt;Bisa (pull request, fork repo)&lt;/td&gt;
&lt;td&gt;Tidak bisa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jadi, walaupun Dropbox/Google Drive bisa untuk &lt;em&gt;backup file&lt;/em&gt;, mereka tidak cocok untuk &lt;strong&gt;pengembangan software&lt;/strong&gt; yang membutuhkan riwayat detail, kolaborasi, dan integrasi otomatis.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kesimpulannya:&lt;/strong&gt; gunakan Dropbox/Google Drive untuk &lt;strong&gt;arsip biasa&lt;/strong&gt;, tapi gunakan Git/GitHub untuk &lt;strong&gt;pengembangan perangkat lunak profesional&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23kp24pck0qd9ec3opes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23kp24pck0qd9ec3opes.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq5eixqzlyrjpshpexhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzq5eixqzlyrjpshpexhj.png" alt=" " width="358" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx8y4908ymiddw4mjo79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqx8y4908ymiddw4mjo79.png" alt=" " width="424" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxbjpaz8a75kwgsopiqx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxbjpaz8a75kwgsopiqx.png" alt=" " width="674" height="443"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Kesimpulan:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VCS&lt;/strong&gt; membantu mengelola perubahan kode dan mempermudah kolaborasi.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; adalah VCS paling populer dengan sistem terdistribusi.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; menyediakan platform online untuk hosting repository Git dan kerja sama developer.
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>softwaredevelopment</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
