← Каталог
Кнопка с загрузкой — React, Promise и поток обновлений — Обёртка `LoadingButton`
Фрагмент из «Кнопка с загрузкой — React, Promise и поток обновлений»: Обёртка `LoadingButton`.
import { useState } from 'react';
function LoadingButton({ onClick, children }) {
const [isLoading, setIsLoading] = useState(false);
async function handleClick() {
if (isLoading) return;
setIsLoading(true);
try {
await onClick();
} finally {
setIsLoading(false);
}
}
return (
<button type="button" onClick={handleClick} disabled={isLoading}>
{isLoading ? '...' : children}
</button>
);
}
function CreateTodoButton() {
return (
<LoadingButton
onClick={async () => {
await createTodoAPI('new todo text');
}}
>
Create Todo
</LoadingButton>
);
}
import { useState } from 'react';
function LoadingButton({ onClick, children }) {
const [isLoading, setIsLoading] = useState(false);
async function handleClick() {
if (isLoading) return;
setIsLoading(true);
try {
await onClick();
} finally {
setIsLoading(false);
}
}
return (
<button type="button" onClick={handleClick} disabled={isLoading}>
{isLoading ? '...' : children}
</button>
);
}
function CreateTodoButton() {
return (
<LoadingButton
onClick={async () => {
await createTodoAPI('new todo text');
}}
>
Create Todo
</LoadingButton>
);
}