Skip to main content

Button

Triggers an operation when clicked.

Source: Re-exported from antd. Full documentation: Ant Design Button

When to Use

  • To trigger a background operation.
  • To trigger a navigation action.
  • To submit a form.

Basic Usage

import { Button } from '@vef-framework-react/components';

export default function Demo() {
return (
<Button type="primary" onClick={() => console.log('clicked')}>
Primary Button
</Button>
);
}

Button Types

import { Button, Space } from '@vef-framework-react/components';

export default function Demo() {
return (
<Space>
<Button type="primary">Primary</Button>
<Button>Default</Button>
<Button type="dashed">Dashed</Button>
<Button type="text">Text</Button>
<Button type="link">Link</Button>
</Space>
);
}

Sizes

import { Button, Space } from '@vef-framework-react/components';

export default function Demo() {
return (
<Space align="center">
<Button type="primary" size="large">Large</Button>
<Button type="primary">Default</Button>
<Button type="primary" size="small">Small</Button>
</Space>
);
}

Loading State

import { Button } from '@vef-framework-react/components';
import { useState } from 'react';

export default function Demo() {
const [loading, setLoading] = useState(false);

return (
<Button
type="primary"
loading={loading}
onClick={() => {
setLoading(true);
setTimeout(() => setLoading(false), 2000);
}}
>
Click to Load
</Button>
);
}

Danger Button

import { Button, Space } from '@vef-framework-react/components';

export default function Demo() {
return (
<Space>
<Button danger>Danger Default</Button>
<Button type="primary" danger>Danger Primary</Button>
<Button type="dashed" danger>Danger Dashed</Button>
</Space>
);
}

API

PropTypeDefaultDescription
type'primary' | 'default' | 'dashed' | 'text' | 'link''default'Button style type
size'large' | 'middle' | 'small''middle'Button size
loadingboolean | { delay?: number }falseShow loading state
disabledbooleanfalseDisable the button
dangerbooleanfalseSet danger status
ghostbooleanfalseMake background transparent
blockbooleanfalseFit button width to parent
iconReactNodeIcon element
iconPosition'start' | 'end''start'Icon position
shape'default' | 'circle' | 'round''default'Button shape
hrefstringRedirect URL (renders as <a>)
targetstringSame as <a> target
htmlType'button' | 'submit' | 'reset''button'Native button type
onClick(event) => voidClick handler

For async operations with automatic loading state and confirm dialogs, use ActionButton instead.

Best Practices

  • Use type="primary" for the main call-to-action on a page. Avoid multiple primary buttons.
  • Use danger for destructive actions like delete.
  • For icon-only buttons with tooltips, use IconButton.
  • For buttons that need permission checks, use OperationButton.