λκ΄μ μ λ°μ΄νΈλ μ¬μ©μ κ²½νμ ν₯μμν€μ§λ§, λ€νΈμν¬ μλ¬ μ²λ¦¬ λ―Έν‘ μ UI λΆμΌμΉμ λ°μ΄ν° μμ€μ μ΄λν©λλ€. μλ¬ νΈλ€λ§, λ‘€λ°± κΈ°λ₯, μλ² μν λκΈ°νλ₯Ό ν΅ν΄ λ°μ΄ν° 무결μ±μ 보μ₯ν΄μΌ ν©λλ€.
λκ΄μ μ λ°μ΄νΈλ μ¬μ©μ κ²½νμ κ°μ νκΈ° μν΄ μλ² μλ΅μ κΈ°λ€λ¦¬μ§ μκ³ UIλ₯Ό μ¦μ μ λ°μ΄νΈνλ λ°©μμ λλ€. νμ§λ§ λ€νΈμν¬ λΆμμ μ΄λ μλ² μλ¬λ‘ μΈν΄ μ€μ μ λ°μ΄νΈκ° μ€ν¨ν κ²½μ°, UIλ μλͺ»λ μνλ₯Ό 보μ¬μ£Όκ² λ©λλ€. μ΄λ¬ν μν©μ μ λλ‘ μ²λ¦¬νμ§ λͺ»νλ©΄ λ°μ΄ν° λΆμΌμΉ, μ¬μ©μ νΌλ, μ¬μ§μ΄ λ°μ΄ν° μμ€κΉμ§ λ°μν μ μμ΅λλ€. λκ΄μ μ λ°μ΄νΈλ λ€νΈμν¬ μμ²μ΄ μ€ν¨ν κ°λ₯μ±μ κ°κ³Όνκ³ , μλ¬ νΈλ€λ§ λ‘μ§ μμ΄ λ¬΄λΆλ³νκ² μ¬μ©λ λ ν° λ¬Έμ λ₯Ό μΌκΈ°ν©λλ€.
λκ΄μ μ λ°μ΄νΈλ₯Ό μ μ©ν λλ λ°λμ μλ¬ νΈλ€λ§ λ‘μ§μ ν¬ν¨ν΄μΌ ν©λλ€. λ€νΈμν¬ μμ² μ€ν¨ μ UIλ₯Ό μ΄μ μνλ‘ λλλ¦¬κ³ , μ¬μ©μμκ² μ μ ν νΌλλ°±(μ: μλ¬ λ©μμ§)μ μ 곡ν΄μΌ ν©λλ€. λν, λ°μ΄ν°μ μ΅μ’ μνλ μλ²μμ κ²μ¦νκ³ ν΄λΌμ΄μΈνΈμ λ°μν΄μΌ λ°μ΄ν° 무결μ±μ μ μ§ν μ μμ΅λλ€. λ‘€λ°± κΈ°λ₯, μ¬μλ λ‘μ§, κ·Έλ¦¬κ³ μλ²μμ μν λκΈ°ν λ©μ»€λμ¦μ ꡬννμ¬ λκ΄μ μ λ°μ΄νΈμ μνμ μ΅μνν΄μΌ ν©λλ€.
// λκ΄μ μ
λ°μ΄νΈ μ μ© (μλ¬ μ²λ¦¬ μμ)
import React, { useState } from 'react';
function LikeButton() {
const [likes, setLikes] = useState(0);
const handleLike = async () => {
setLikes(likes + 1); // μ¦μ UI μ
λ°μ΄νΈ (λκ΄μ μ
λ°μ΄νΈ)
try {
await fetch('/api/like', { method: 'POST' });
// μλ² μμ² μ±κ³΅ μ μλ¬΄λ° λμ μμ
} catch (error) {
// μλ¬ λ°μ μ μλ¬΄λ° λμ μμ (λ¬Έμ !)
console.error('Like request failed:', error);
}
};
return (
<button onClick={handleLike}>
Like ({likes})
</button>
);
}
export default LikeButton;
// λκ΄μ μ
λ°μ΄νΈ μ μ© (μλ¬ μ²λ¦¬ ν¬ν¨)
import React, { useState } from 'react';
function LikeButton() {
const [likes, setLikes] = useState(0);
const [isLiking, setIsLiking] = useState(false);
const handleLike = async () => {
if (isLiking) return;
setIsLiking(true);
const previousLikes = likes;
setLikes(likes + 1); // μ¦μ UI μ
λ°μ΄νΈ (λκ΄μ μ
λ°μ΄νΈ)
try {
await fetch('/api/like', { method: 'POST' });
setIsLiking(false);
} catch (error) {
console.error('Like request failed:', error);
setLikes(previousLikes); // UI λ‘€λ°±
setIsLiking(false);
alert('Like failed. Please try again.'); // μ¬μ©μμκ² μλ¦Ό
}
};
return (
<button onClick={handleLike} disabled={isLiking}>
Like ({likes})
</button>
);
}
export default LikeButton;