- Apa Itu Context API?
- Langkah 1 - Membuat Context
- Langkah 2 - Membungkus Component dengan Provider
- Langkah 3 - Menggunakan Context dengan useContext
- Langkah 4 - Context dengan Beberapa Value
- Kesimpulan
Halo teman-teman semuanya, pada artikel sebelumnya kita sudah belajar tentang Memoization di React, yaitu optimasi performa menggunakan React.memo, useMemo, dan useCallback.
Pada artikel kali ini, kita akan membahas tentang Context API, yaitu cara berbagi data antar component tanpa harus mengoper props dari satu component ke component lainnya secara berlapis-lapis.
Apa Itu Context API?
Context API adalah fitur bawaan React yang memungkinkan kita untuk mengirim data ke banyak component tanpa harus melakukan props drilling.
Props drilling adalah kondisi ketika kita harus meneruskan props melalui banyak component yang sebenarnya tidak membutuhkannya, hanya agar component di level bawah bisa mengakses data.
Dengan Context API, kita bisa membuat sebuah context yang dapat diakses oleh component mana pun di dalam aplikasi.
Langkah 1 - Membuat Context
Untuk membuat context, kita gunakan createContext().
import { createContext } from "react";
export const UserContext = createContext();
Penjelasan:
- Kita membuat
UserContextmenggunakancreateContext(). - Context ini nantinya akan digunakan untuk menyediakan dan mengonsumsi data.
Langkah 2 - Membungkus Component dengan Provider
Provider adalah component yang digunakan untuk membungkus bagian aplikasi yang ingin kita beri akses ke context.
import { useState } from "react";
import { UserContext } from "./UserContext";
import Profile from "./Profile";
function App() {
const [user, setUser] = useState({ name: "Budi", age: 20 });
return (
<UserContext.Provider value={user}>
<div>
<h1>Aplikasi React Context</h1>
<Profile />
</div>
</UserContext.Provider>
);
}
export default App;
Penjelasan:
UserContext.Providermenyediakan datauser.- Semua component di dalam
Providerbisa mengakses datauser.
Langkah 3 - Menggunakan Context dengan useContext
Untuk mengambil data dari context, kita gunakan useContext().
import { useContext } from "react";
import { UserContext } from "./UserContext";
function Profile() {
const user = useContext(UserContext);
return (
<div>
<h2>Profile</h2>
<p>Nama: {user.name}</p>
<p>Umur: {user.age}</p>
</div>
);
}
export default Profile;
Penjelasan:
- Kita import
useContextdanUserContext. useContext(UserContext)memberi kita akses ke datauser.- Data tersebut bisa langsung ditampilkan di UI.
Langkah 4 - Context dengan Beberapa Value
Kita juga bisa mengirim lebih dari satu nilai melalui context, misalnya data dan fungsi untuk mengubah data.
import { useState } from "react";
import { UserContext } from "./UserContext";
import Profile from "./Profile";
function App() {
const [user, setUser] = useState({ name: "Budi", age: 20 });
return (
<UserContext.Provider value={{ user, setUser }}>
<div>
<h1>Aplikasi React Context</h1>
<Profile />
</div>
</UserContext.Provider>
);
}
export default App;
Lalu di Profile.jsx:
import { useContext } from "react";
import { UserContext } from "./UserContext";
function Profile() {
const { user, setUser } = useContext(UserContext);
return (
<div>
<h2>Profile</h2>
<p>Nama: {user.name}</p>
<p>Umur: {user.age}</p>
<button onClick={() => setUser({ ...user, age: user.age + 1 })}>
Tambah Umur
</button>
</div>
);
}
export default Profile;
Penjelasan:
- Kita kirim
userdansetUserlewatProvider. - Di
Profile, kita bisa membaca sekaligus mengubah datauser.
Kesimpulan
Pada artikel ini, kita sudah belajar tentang Context API, fitur bawaan React untuk berbagi data antar component tanpa harus melakukan props drilling.
Kita sudah membuat context dengan createContext, menyediakan data dengan Provider, dan mengaksesnya dengan useContext.
Di artikel berikutnya, kita akan membahas tentang Custom Hooks, yaitu bagaimana membuat hook buatan sendiri untuk menyederhanakan logika yang bisa digunakan kembali.
Terima kasih
Artikel ini dibaca sebanyak 2.462 kali
{ setTimeout(() => { showShimmer = false; }, 300); })"
:class="{'opacity-0': !loaded, 'opacity-100': loaded}"
class="lazy w-full h-auto rounded-xl border border-white dark:border-neutral-700/80 transition-opacity duration-500"
loading="lazy"
/>
SAWERIA
Memuat komentar...