Blogger Jateng

Mengelola State di React

React adalah sebuah library JavaScript populer yang digunakan untuk membangun antarmuka pengguna yang dinamis dan interaktif. Hal yang paling penting dalam pengembangan React adalah Mengelola state dari sebuah aplikasi. State adalah data (sering kali data UI) yang mempengaruhi fungsi dan rendering sebuah komponen. Pada artikel ini, kita akan membahas apa itu state, bagaimana cara kerjanya, apa saja jenis-jenis state yang berbeda dan semua pendekatan untuk mengelolanya dalam aplikasi React.

Memahami State dalam React

Dalam React, state mengacu pada data yang dapat berubah-ubah yang memiliki efek pada komponen yang di-render. Tidak seperti props, yang bersifat read-only dan mengalir ke bawah dari komponen induk, state bersifat component-local, dan dapat berubah seiring waktu. Setiap kali salah satu state-nya diperbarui, sebuah komponen akan di-render ulang, menampilkan data terbaru ke frontend.

Sebagai contoh, komponen penghitung mungkin menggunakan variabel state count yang merepresentasikan hitungan saat ini. Setiap kali pengguna menekan tombol untuk menambah atau mengurangi hitungan, perubahan state akan memicu komponen untuk merender ulang dengan menampilkan hitungan saat ini.

import React, { useState } from 'react';


function Counter() {

  const [count, setCount] = useState(0);


  return (

    <div>

      <p>Count: {count}</p>

      <button onClick={() => setCount(count + 1)}>Increment</button>

      <button onClick={() => setCount(count - 1)}>Decrement</button>

    </div>

  );

}

Mengapa Manajemen State Penting

Ketika aplikasi menjadi semakin kompleks, melacak state menjadi sulit. Ada banyak cara manajemen state yang tidak terorganisir dengan baik akan menyebabkan bug, render ulang yang lambat, dan membuatnya tidak mungkin untuk mempertahankan atau meningkatkan basis kode Anda. Manajemen state yang baik memastikan bahwa aplikasi Anda berfungsi seperti yang diharapkan, di-render ulang dengan cepat, dan lebih mudah di-debug.

sumber: leravio.com

Jenis-jenis State dalam React

State Lokal: Ditangani dalam komponen dan dikelola menggunakan hook, misalnya useState. Sangat bagus untuk mengelola logika state yang sederhana dan terisolasi.

Global State: Digunakan bersama pada banyak komponen. Ini berarti library seperti Redux atau React Context API untuk mengelola state global.

Server State: Data jarak jauh - API. React Query adalah salah satu alat yang mengabstraksikan manajemen state server.

Derived State: Dihitung dari state atau alat peraga yang ada dan bukan disimpan secara langsung.Strategi untuk Mengelola Negara

Strategi untuk Mengelola Negara

1. Pengambilan Data Jarak Jauh dengan useEffect

Cara yang paling sederhana adalah dengan menggunakan hook useState, untuk mengelola state dalam komponen fungsional React. Cara ini sangat bagus untuk state yang kecil dan terisolasi.

const [value, setValue] = useState(initialValue);

2. Menangani State yang Kompleks dengan useReducer

Ketika logika state yang kompleks, dan melibatkan beberapa sub-nilai atau jika state berikutnya bergantung pada state sebelumnya, kita harus menggunakan useReducer. Ini memberi Anda pendekatan yang dapat diprediksi untuk mengatur state melalui fungsi peredam.

import React, { useReducer } from 'react';


const initialState = { count: 0 };


function reducer(state, action) {

  switch (action.type) {

    case 'increment':

      return { count: state.count + 1 };

    case 'decrement':

      return { count: state.count - 1 };

    default:

      throw new Error();

  }

}


function Counter() {

  const [state, dispatch] = useReducer(reducer, initialState);


  return (

    <div>

      <p>Count: {state.count}</p>

      <button onClick={() => dispatch({ type: 'increment' })}>Increment</button>

      <button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>

    </div>

  );

}

3. API Konteks untuk Global State

React Context API sangat berguna untuk mengoper data melalui pohon komponen tanpa harus mengoper props secara manual di setiap level. API ini sangat cocok untuk membagikan state global seperti autentikasi pengguna dan pengaturan tema.

import React, { createContext, useContext, useState } from 'react';


const ThemeContext = createContext();


function ThemeProvider({ children }) {

  const [theme, setTheme] = useState('light');


  return (

    <ThemeContext.Provider value={{ theme, setTheme }}>

      {children}

    </ThemeContext.Provider>

  );

}


function App() {

  const { theme, setTheme } = useContext(ThemeContext);


  return (

    <div className={`app ${theme}`}>

      <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>

        Toggle Theme

      </button>

    </div>

  );

}

4. Pustaka Pihak Ketiga

Untuk aplikasi yang lebih luas, library eksternal seperti Redux, MobX, atau Zustand menyediakan fitur-fitur manajemen state yang canggih. Mereka dilengkapi dengan penyimpanan terpusat, middleware, debugging perjalanan waktu, dll. 

5. Status Server dengan React Query

Menyediakan utilitas untuk mengambil data, menyimpan data di cache, dan menyinkronkan status server ke UI Anda. React menyembunyikan banyak kode boilerplate untuk menangani interaksi server.

import { useQuery } from 'react-query';


function FetchData() {

  const { data, error, isLoading } = useQuery('data', fetchData);


  if (isLoading) return <p>Loading...</p>;

  if (error) return <p>Error: {error.message}</p>;


  return <div>{JSON.stringify(data)}</div>;

}


Kesimpulan

Manajemen State: Keahlian Stateful Component adalah keahlian mendasar dalam mengembangkan Aplikasi Reaktif. Jadi kesimpulannya, apakah Anda menggunakan useState untuk state lokal yang sederhana atau menggunakan alat bantu seperti Redux dan React Query untuk kasus penggunaan tingkat lanjut, memutuskan metode mana yang Anda pilih akan memastikan aplikasi Anda dapat diskalakan dan berkinerja baik. Ketika Anda memahami berbagai jenis state dan cara mengelolanya, Anda akan diperlengkapi dengan baik untuk menulis aplikasi React yang kuat. 

kembali ke>>>>  React.js untuk Pemula: Membangun Aplikasi Pertama Anda