1. Event Handling
Event Handling adalah cara program/aplikasi merespons aksi yang terjadi, seperti mengklik tombol, mengetikkan sesuatu, atau melakukan event lain. Ketika suatu event terjadi, program akan mengeksekusi event yang telah ditentukan sebelumnya untuk merespons aksi tersebut. Event handling memungkinkan program/aplikasi berinteraksi dengan user secara dinamis.
Ada beberapa contoh event yang sering kita gunakan di HTML, seperti berikut
mouse: ada event onClick, onDoubleClick, onMouseEnter, onContextMenu, onDrag, onDrop.keyboard: ada event onKeyDown, onKeyUp, & onKeyPress.focus: ada event onFocus & onBlurform: ada event onSubmit, onInput, & onChangeclipboard: ada event onCopy, onCut, & onPasteselection: ada event onSelectimage: ada event onLoad & onError- t
ouch: ada event onTouchStart, onTouchCancel, onTouchEnd & onTouchMove UI: ada event onScroll
Penulisan event pada property element menggunakan camelCase seperi onChange, onClick dan lain-lain. Pada materi state, kita sudah menggunakan event yang ada pada property element dengan cara inline.
...
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");
}}
/>
</div>
</main>
);
};
export default Home;
event di property akan memanggil function, baik itu secara inline maupun kita dekralasikan terlebih dahulu. Dalam membuat event di ReactJS , kita dapat menggunakan beberapa cara sebagai berikut.
1. Event dengan Inline
Inline artinya kita langsung memanggil function di dalam event tanpa dideklarasikan terlebuh dahulu.
...
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");
}}
/>
</div>
</main>
);
};
export default Home;
onClick tanpa didekrasikan terlebih dahulu. Ketika button di klik , maka akan memanggil function updater untuk merubah message menjadi hello.
Jalankan pada Browser
2. Deklarasikan Function tanpa argument
Kita bisa mendeklarasikan function terlebih dahulu , kemudian kita panggil function tersebut di event onClick.
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
import Button from "./component/Button";
const Home = () => {
let [message, setMessage] = useState("hai"); // jika string, dengan data awal "hai"
let [count, setCount] = useState(0); // jika number , dengan data awal 0
const increment = () => {
setCount((c) => c + 1);
};
const decrement = () => {
setCount((c) => c - 1);
};
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");
}}
/>
<div>{count}</div>
<Button
title="Tambah"
variant="solid"
colorSchema="blue"
onClick={increment}
/>
<Button
title="Kurang"
variant="solid"
colorSchema="red"
onClick={decrement}
/>
</main>
);
};
export default Home;
Pada contoh di atas, kita deklarasikan dua function yaitu increment dan decrement , kemudian kita panggil di dalam onClick.
3. Deklarasikan function dengan argument event type
argument dari function juga bisa merupakan event type yang mana nanti kita bisa mengakes propery dari suatu element HTML seperti nama, value, id dan lain-lain. Berikut contoh bagaimana membuat function dengan argument event type dan cara menggunakannnya pada event.
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
import InputText from "../component/InputText";
import { ChangeEvent } from "react";
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 [payload, setPayload] = useState({
name: "",
password: "",
email: "",
alamat: "",
});
const handleChange = (event: ChangeEvent<any>) => {
setPayload(() => {
return {
...payload,
[event.target.name]: event.target.value,
};
});
};
console.log("pay", payload);
return (
<main className="space-y-5 p-10">
{JSON.stringify(payload)}
<InputText
id="name"
name="name"
placeholder="name"
value={payload.name}
onChange={(event) => {
console.log("eve", event.target.value);
setPayload(() => {
return {
...payload,
name: event.target.value,
};
});
}}
/>
<InputText
id="name"
placeholder="name"
name="name"
value={payload.name}
onChange={handleChange}
/>
<InputText
id="password"
placeholder="password"
name="password"
value={payload.password}
onChange={handleChange}
/>
<InputText
id="email"
placeholder="email"
name="email"
value={payload.email}
onChange={(e: ChangeEvent) => {
handleChange(e);
}}
/>
<InputText
id="alamat"
name="alamat"
placeholder="alamat"
value={payload.alamat}
onChange={(e: ChangeEvent) => {
handleChange(e);
}}
/>
</main>
);
};
export default Home;
Kita bisa langsung memanggil nama function pada onChange dan tidak menuliskan argument nya, seperti pada kode onChange={handleChange}.JSX akan secara otomatis memberikan argument yang diberikan yaitu event type dari suatu element.
Selain itu, kita juga bisa memanggil function seperti inline, namun dalam function itu memanggil function handleChange dan memberikan argument event onChange={(event)=> {handleChange(event)}}.
Jalankan pada Browser
4. Deklarasikan function dengan argument
Sebelumnya kita belajar membuat function untuk event jika argumentnya adalah sebuah event type, selain itu kita bisa membuat function yang digunakan dalam event dengan argument bebas. Argument yang diberikan bisa satu maupun lebih dari satu.
Function dengan satu argument
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
import Button from "./component/Button";n
const Home = () => {
let [message, setMessage] = useState("hai"); // jika string, dengan data awal "hai"
let [count, setCount] = useState(0); // jika number , dengan data awal 0
const handleSubmit = (id : number) => {
alert(id)
}
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");
}}
/>
<div>{count}</div>
<Button
title="10"
variant="solid"
colorSchema="blue"
onClick={()=> {
handleSubmit(10)
}}
/>
<Button
title="100"
variant="solid"
colorSchema="red"
onClick={()=> {
handleSubmit(100)
}}
/>
</main>
);
};
export default Home;
Jalankan pada Browser
Function dengan lebih dari argument
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
import Button from "./component/Button";
const Home = () => {
let [message, setMessage] = useState("hai"); // jika string, dengan data awal "hai"
let [count, setCount] = useState(0); // jika number , dengan data awal 0
const handleSubmit = (id : number, nama : string) => {
alert(`nama adalah ${nama} dengan id adalah ${id}`)
}
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");
}}
/>
<div>{count}</div>
<Button
title="10"
variant="solid"
colorSchema="blue"
onClick={()=> {
handleSubmit(10, "ihsan")
}}
/>
<Button
title="100"
variant="solid"
colorSchema="red"
onClick={()=> {
handleSubmit(100, "akbar")
}}
/>
</main>
);
};
export default Home;
Jalankan pada Browser
5. Function sebagai suatu Props
Pada struktur project reactjs, terkadang ada kebuutuhan yang mengharuskan kita membuat function pada komponen parent dan dikirimkan ke komponen child sebagai sebuah props. Berikut contoh bagaimana mengimplentasikan hal tersebut.
Membuat Komponen Belajar di folder module
import Button from "../component/Button";
interface BelajarProps {
handleSubmit: (a: number, b: string) => void;
}
const BelajarEvent: React.FC<BelajarProps> = ({ handleSubmit }) => {
return (
<section>
<h1>Belajar Event</h1>
<Button
title="testing"
colorSchema="green"
onClick={() => {
handleSubmit(200, "akbar");
}}
/>
</section>
);
};
export default BelajarEvent;
Panggil di app/page.tsx
"use client"; // gunakan use client karena ada onChange pda komponen
import { useState } from "react";
import Button from "./component/Button";
import BelajarEvent from "./module/belajar";
const Home = () => {
let [message, setMessage] = useState("hai"); // jika string, dengan data awal "hai"
let [count, setCount] = useState(0); // jika number , dengan data awal 0
const handleSubmit = (id : number, nama : string) => {
alert(`nama adalah ${nama} dengan id adalah ${id}`)
}
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");
}}
/>
<div>{count}</div>
<Button
title="10"
variant="solid"
colorSchema="blue"
onClick={()=> {
handleSubmit(10, "ihsan")
}}
/>
<Button
title="100"
variant="solid"
colorSchema="red"
onClick={()=> {
handleSubmit(100, "akbar")
}}
/>
<BelajarEvent handleSubmit={handleSubmit} />
</main>
);
};
export default Home;
Pada kode di atas adalah contoh bagaimana function yang dibuat di komponen parent dikirimkan ke child melalui props. Kemudian pada komponen child kita menggunakan function tersebut dan memanggilnya dalam event
Warning
Latihan sangat diperlukan untuk memahami materi ini, buatlah latihan mandiri dan diskusikan dengan guru.