๋งฅ๋ฝ ์ค์ด๊ธฐ
1. ๊ฐ์ด ์คํ๋์ง ์๋ ์ฝ๋ ๋ถ๋ฆฌํ๊ธฐ
๋ฌธ์ ์ฝ๋
์๋์ ์์์์ ๊ฐ์ด ์คํ๋๋ ์ฝ๋๋ ๋ฌด์์ด๊ณ ๊ฐ์ด ์คํ๋์ง ์๋ ์ฝ๋๋ ๋ฌด์์ผ๊น?
function SubmitButton() {
const isViewer = useRole() === "viewer";
useEffect(() => {
if (isViewer) {
return;
}
showButtonAnimation();
}, [isViewer]);
return isViewer ? (
<TextButton disabled>Submit</TextButton>
) : (
<Button type="submit">Submit</Button>
);
}
์์ SubmitButton ์ปดํฌ๋ํธ๋ isViewer ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋์ ํ๋ ์ปดํฌ๋ํธ์ด๋ค.
- ์ฐธ :
TextButton๋ ๋๋ง. - ๊ฑฐ์ง :
showButtonAnimationํธ์ถ,Button์ ๋ ๋๋ง.
์ฆ '์ฐธ or ๊ฑฐ์ง' ์ ๋ฐ๋ผ ์ด๋ค ์ฝ๋๋ ์ ํ ์คํ๋์ง ์๋๋ค๋ ์๊ธฐ๋ค.
๊ฐ์ ์ฝ๋
function SubmitButton() {
const isViewer = useRole() === "viewer";
return isViewer ? <ViewerSubmitButton /> : <AdminSubmitButton />;
}
function ViewerSubmitButton() {
return <TextButton disabled>Submit</TextButton>;
}
function AdminSubmitButton() {
useEffect(() => {
showButtonAnimation();
}, []);
return <Button type="submit">Submit</Button>;
}
์ ์ฒ๋ผ isViewer ๊ฐ ์ฐธ์ผ๋๋ง ์คํ๋๋ ์ฝ๋์ ๊ฑฐ์ง์ผ๋๋ง ์คํ๋๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๋ฉด ํจ์ฌ ๊ฐ๋
์ฑ์ด ๊ฐ์ ๋๋ค.
2. ๊ตฌํ ์์ธ ์ถ์ํํ๊ธฐ
๋ฌธ์ ์ฝ๋
์๋์ ์์๋ ํ ์ปดํฌ๋ํธ ์์ ์์ธ ๋ก์ง๊ณผ UI ๋ ๋๋ง ์ฑ ์์ด ํจ๊ป ์๋ ๊ฒฝ์ฐ๋ค.
function FriendInvitation() {
const { data } = useQuery(/* ์๋ต.. */);
// ์ด์ธ ์ด ์ปดํฌ๋ํธ์ ํ์ํ ์ํ ๊ด๋ฆฌ, ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐ ๋น๋๊ธฐ ์์
๋ก์ง...
const handleClick = async () => {
const canInvite = await overlay.openAsync(({ isOpen, close }) => (
<ConfirmDialog
title={`${data.name}๋์๊ฒ ๊ณต์ ํด์`}
cancelButton={
<ConfirmDialog.CancelButton onClick={() => close(false)}>
๋ซ๊ธฐ
</ConfirmDialog.CancelButton>
}
confirmButton={
<ConfirmDialog.ConfirmButton onClick={() => close(true)}>
ํ์ธ
</ConfirmDialog.ConfirmButton>
}
/* ์ค๋ต */
/>
));
if (canInvite) {
await sendPush();
}
};
// ์ด์ธ ์ด ์ปดํฌ๋ํธ์ ํ์ํ ์ํ ๊ด๋ฆฌ, ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐ ๋น๋๊ธฐ ์์
๋ก์ง...
return (
<>
<Button onClick={handleClick}>์ด๋ํ๊ธฐ</Button>
{/* UI๋ฅผ ์ํ JSX ๋งํฌ์
... */}
</>
);
}
์ด ์ปดํฌ๋ํธ๋ ์ง๊ธ ์ฌ๋ฌ ๋งฅ๋ฝ์ ๊ฐ์ง๊ณ ์๋ค.
๊ฐ์ ์ฝ๋
export function FriendInvitation() {
const { data } = useQuery(/* ์๋ต.. */);
// ์ด์ธ ์ด ์ปดํฌ๋ํธ์ ํ์ํ ์ํ ๊ด๋ฆฌ, ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฐ ๋น๋๊ธฐ ์์
๋ก์ง...
return (
<>
<InviteButton name={data.name} />
{/* UI๋ฅผ ์ํ JSX ๋งํฌ์
*/}
</>
);
}
function InviteButton({ name }) {
return (
<Button
onClick={async () => {
const canInvite = await overlay.openAsync(({ isOpen, close }) => (
<ConfirmDialog
title={`${name}๋์๊ฒ ๊ณต์ ํด์`}
cancelButton={
<ConfirmDialog.CancelButton onClick={() => close(false)}>
๋ซ๊ธฐ
</ConfirmDialog.CancelButton>
}
confirmButton={
<ConfirmDialog.ConfirmButton onClick={() => close(true)}>
ํ์ธ
</ConfirmDialog.ConfirmButton>
}
/* ์ค๋ต */
/>
));
if (canInvite) {
await sendPush();
}
}}
>
์ด๋ํ๊ธฐ
</Button>
);
}
