1. State Fundamental
State adalah data yang dimiliki oleh sebuah komponen yang berasal dari komponen itu sendiri dan data dalam state boleh berubah. useState digunakan untuk membuat state pada function component.
Pada React Component ketika nilai state berubah maka komponen akan dirender ulang dan user interface pada browser akan berubah sesuai dengan perubahan nilai dari state itu sendiri.
Berikut format penulisan state pada React Component
Keterangan
const/letadalah keyword pendeklarasi state.nameStateadalah nama dari state.setterStateadalah nama function yang akan digunakan untuk mengubah nilai state.initialValueadalah nilai awal dari state.
Perhatian
Pada NextJS 13 di folder app ketika menggunakan state harus menggunakan menjadikan komponen sebagai client component dengan tanda use client pada awal baris kode. Pembahasan selengkapnya pada materi nextjs fundamental.
1. Membuat State pada Component
Berikut beberapa contoh pembuatan state pada React Component dengan beberapa tipe data.
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
type Identitas = {
nama: string;
sekolah: string;
umur: number | null;
};
type Hasil = {
mata_pelajaran: string;
nilai: number | null;
};
const Home = () => {
let [message, setMessage] = useState("hai"); // jika string, dengan data awal "hai"
let [count, setCount] = useState(0); // jika number , dengan data awal 0
let [isLogin, setIsLogin] = useState(false); // jika booelan, dengan data awal false
let [profile, setProfile] = useState<Identitas>({
// jika sebuah object
nama: "",
sekolah: "",
umur: null,
});
let [hasil, setHasil] = useState<Hasil[]>([]); // jika sebuah array dengan data awal array kosong
return (
<main className="space-y-5">
<h1>Hello World</h1>
</main>
);
};
export default Home;
2. Render State pada JSX
untuk merender state pada JSX cara sama dengan kita merender props maupun variabel biasa di JavaScript yaitu dengan {nama_state}
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
type Identitas = {
nama: string;
sekolah: string;
umur: number | null;
};
type Hasil = {
mata_pelajaran: string;
nilai: number | null;
};
const Home = () => {
let [message, setMessage] = useState("hai"); // jika string, dengan data awal "hai"
let [count, setCount] = useState(0); // jika number , dengan data awal 0
let [isLogin, setIsLogin] = useState(false); // jika booelan, dengan data awal false
let [profile, setProfile] = useState<Identitas>({
// jika sebuah object
nama: "Ilham Jaya kusuma",
sekolah: "SMK MADINATULQURAN",
umur: 17,
});
let [hasil, setHasil] = useState<Hasil[]>([
{
mata_pelajaran: "matematika",
nilai: 80,
},
{
mata_pelajaran: "fisika",
nilai: 90,
},
{
mata_pelajaran: "kimia",
nilai: 95,
},
]); // jika sebuah array
return (
<main className="space-y-5">
<h1>Hello World</h1>
<p>message addalah {message}</p>
<p>Count adalah {count}</p>
<p> {isLogin ? "Sudah Login" : "Belum Login"}</p>
<div className="flex flex-col">
<h5>Nama : {profile.nama}</h5>
<h5>Sekolah : {profile.sekolah}</h5>
<h5>Umur : {profile.umur}</h5>
</div>
<div>
<h2>Daftar Nilai</h2>
{hasil.map((n, index) => (
<section key={index}>
<h5>Nama Mata pelajaran : {n.mata_pelajaran} </h5>
<h5>Nilai : {n.nilai} </h5>
</section>
))}
</div>
</main>
);
};
export default Home;
Pada kode di atas adalah contoh bagaimana state di render pada komponen, baik itu string, number, boolean, object maupun array.
Note
List Rendering pada ssat merender Array pada JSX akan dibahas pada materi selanjutnya.
Jalankan pada Browser
2. Function Updater
Function Updater merupakan suatu function untuk merubah value dari state. Merubah value dengan function updater merupakan cara yang paling aman dan best practice. Function Update biasanya diberikan nama setNamaState, seperti pada contoh let [message, setMessage] = useState("hai") maka setMessage merupakan function Updater dari state message.
Berikut contoh pengunaan Function Updater pada komponen.
...
return (
<main className="space-y-5">
<h1>Hello World</h1>
<p>message addalah {message}</p>{" "}
<Button
title="Hello"
variant="solid"
colorSchema="blue"
onClick={() => {
setMessage("Hello");
}}
/>
<Button
title="Salam"
variant="outline"
colorSchema="blue"
onClick={() => {
setMessage("Assalamualaikum");
}}
/>
<p>Count adalah {count}</p>
<Button
title="Tambah"
variant="solid"
colorSchema="blue"
onClick={() => {
setCount((prevCount) => prevCount + 1);
}}
/>
<Button
title="Kurang"
isDisabled={count < 1}
variant="solid"
colorSchema="red"
onClick={() => {
setCount((prevCount) => prevCount - 1);
}}
/>
<p> {isLogin ? "Sudah Login" : "Belum Login"}</p>
<Button
title="Login"
isDisabled={isLogin === true}
variant="solid"
colorSchema="blue"
onClick={() => {
setIsLogin(true);
}}
/>
<Button
title="Logout"
isDisabled={isLogin === false}
variant="solid"
colorSchema="red"
onClick={() => {
setIsLogin(false);
}}
/>
<div className="flex flex-col">
<h5>Nama : {profile.nama}</h5>
<h5>Sekolah : {profile.sekolah}</h5>
<h5>Umur : {profile.umur}</h5>
</div>
<Button
title="Ubah Nama"
variant="solid"
colorSchema="blue"
onClick={() => {
setProfile((prevProfile) => {
return {
...prevProfile,
nama: "Ilham Maulana Fikri",
};
});
}}
/>
<Button
title="Update"
variant="solid"
colorSchema="blue"
onClick={() => {
setProfile((prevProfile) => {
return {
...prevProfile,
sekolah: "SMP MADINATULQURAN",
};
});
}}
/>
<div>
<h2>Daftar Nilai</h2>
{hasil.map((n, index) => (
<section key={index}>
<h5>Nama Mata pelajaran : {n.mata_pelajaran} </h5>
<h5>Nilai : {n.nilai} </h5>
</section>
))}
<Button
title="Tambah"
variant="solid"
colorSchema="blue"
onClick={() => {
setHasil((prevHasil) => {
return [
...prevHasil,
{
mata_pelajaran: "B. Indonesia",
nilai: 100,
},
];
});
}}
/>
<Button
title="Kurang"
isDisabled={hasil.length <= 1}
variant="solid"
colorSchema="red"
onClick={() => {
setHasil((prevHasil) => {
prevHasil.pop();
return [...prevHasil];
});
}}
/>
</div>
</main>
);
};
export default Home;
Pengujian pada Postman
Cara Penggunaan function updater tidak hanya seperti contoh di atas, sering dengen perkembangan materi kita akan mempelajari cara-cara yang lainnya.