D. useMemo
useMemo
digunakan untuk mengingat (memorize) nilai yang dihasilkan oleh suatu komputasi.
useMemo
menggunakan deps
untuk menentukan apakan fn
akan dipanggil atau tidak. Jika deps
yang diberikan pada useMemo
tidak berubah, maka useMemo
akan otomatis mengembalikan value
yang sama seperti pemanggilan fn
sebelumnya, tanpa memanggil fn
lagi
app/page.tsx
"use client";
import { useEffect, useState, memo, useCallback, useMemo } from "react";
import InputText from "./component/InputText";
import Button from "./component/Button";
import Link from "next/link";
import User from "./module/User";
const Home = () => {
const [users, setUser] = useState<string[]>(["ihsan", "faisal", "arriq"]);
const [text, setText] = useState<string>("");
const handleDelete = useCallback((index: number) => {
setUser((user) => {
user.splice(index, 1);
return [...user];
});
}, []);
const handleAddUser = () => {
setUser((user) => {
return [...user, text];
});
setText("");
};
const result = () => {
console.log("perhitungan berjalan");
let i = 0;
while (i < 20) i++;
console.log(i)
return users;
};
return (
<section className="space-y-5">
<User users={result()} handleDelete={handleDelete} />
<InputText
placeholder="ketik "
id="text"
name="text"
value={text}
onChange={(e) => setText(e.target.value)}
/>
<Button title="tambah" colorSchema="blue" onClick={handleAddUser} />
</section>
);
};
export default Home;
app/page.tsx
"use client";
import { useEffect, useState, memo, useCallback, useMemo } from "react";
import InputText from "./component/InputText";
import Button from "./component/Button";
import Link from "next/link";
import User from "./module/User";
const Home = () => {
const [users, setUser] = useState<string[]>(["ihsan", "faisal", "arriq"]);
const [text, setText] = useState<string>("");
const handleDelete = useCallback((index: number) => {
setUser((user) => {
user.splice(index, 1);
return [...user];
});
}, []);
const handleAddUser = () => {
setUser((user) => {
return [...user, text];
});
setText("");
};
const result = useMemo(() => {
console.log("perhitungan berjalan");
let i = 0;
while (i < 200000000) i++;
return users;
}, [users]);
return (
<section className="space-y-5">
<User users={result} handleDelete={handleDelete} />
<InputText
placeholder="ketik "
id="text"
name="text"
value={text}
onChange={(e) => setText(e.target.value)}
/>
<Button title="tambah" colorSchema="blue" onClick={handleAddUser} />
</section>
);
};
export default Home;