기본 props
기본 props (Default props)
theme.components를 설정해 모든 Mantine 컴포넌트의 기본 props를 정의할 수 있어요. 이 props는 컴포넌트 props로 재정의되지 않는 한 애플리케이션의 모든 컴포넌트에서 기본으로 사용돼요:
import { MantineProvider, Button, Group, createTheme } from '@mantine/core';
const theme = createTheme({
components: {
Button: Button.extend({
defaultProps: {
color: 'cyan',
variant: 'outline',
},
}),
},
});
function Demo() {
return (
<MantineProvider theme={theme}>
<Group>
<Button>Default button</Button>
<Button color="red" variant="filled">Button with props</Button>
</Group>
</MantineProvider>
);
}
출처: 문서
본문
MantineThemeProvider로 기본 props 정의
MantineThemeProvider를 사용해 애플리케이션의 일부에 대한 기본 props를 정의할 수도 있어요:
import {
Button,
createTheme,
MantineThemeProvider,
} from '@mantine/core';
const theme = createTheme({
components: {
Button: Button.extend({
defaultProps: {
color: 'cyan',
variant: 'outline',
},
}),
},
});
function Demo() {
return (
<>
<MantineThemeProvider theme={theme}>
{/* Part of the app with theme */}
<Button>With theme</Button>
</MantineThemeProvider>
{/* Another part without theme */}
<Button>Without theme</Button>
</>
);
}
복합 컴포넌트의 기본 props
Menu와 Tabs 같은 일부 컴포넌트는 연관된 복합 컴포넌트(Menu.Item, Tabs.List 등)를 가져요. 컴포넌트 이름에서 점(dot)을 빼면 이 컴포넌트들에 기본 props를 추가할 수 있어요:
import {
createTheme,
MantineProvider,
Menu,
Tabs,
} from '@mantine/core';
const theme = createTheme({
components: {
MenuItem: Menu.Item.extend({
defaultProps: { color: 'red' },
}),
TabsList: Tabs.List.extend({
defaultProps: {
justify: 'center',
},
}),
},
});
function Demo() {
return (
<MantineProvider theme={theme}>
{/* Your app here */}
</MantineProvider>
);
}
useProps 훅
useProps 훅을 사용해 어떤 커스텀 컴포넌트에든 기본 props 지원을 추가할 수 있어요. useProps는 세 개의 인자를 받아요:
-
컴포넌트 이름(문자열) – 컴포넌트를 theme과 연결하는 데 사용돼요
-
defaultProps– 컴포넌트 수준의 기본 props – theme에 기본 props가 정의되지 않았을 때 이 props가 사용돼요 -
props– 컴포넌트에 전달된 props
import { useProps, MantineThemeProvider, createTheme } from '@mantine/core';
interface CustomComponentProps {
color?: string;
children?: React.ReactNode;
}
const defaultProps = {
color: 'red',
} satisfies Partial<CustomComponentProps>;
function CustomComponent(props: CustomComponentProps) {
const { color, children } = useProps('CustomComponent', defaultProps, props);
return <div style={{ color }}>{children}</div>;
}
const theme = createTheme({
components: {
CustomComponent: {
defaultProps: {
color: 'green',
},
},
},
});
function Demo() {
return (
<MantineThemeProvider theme={theme}>
<CustomComponent>Default color</CustomComponent>
<CustomComponent>Provider color</CustomComponent>
<CustomComponent color="blue">Prop color</CustomComponent>
</MantineThemeProvider>
);
}
withProps 함수
모든 Mantine 컴포넌트에는 컴포넌트에 기본 props를 추가하는 데 사용할 수 있는 withProps 정적 함수가 있어요:
import { Button, TextInput } from '@mantine/core';
const LinkButton = Button.withProps({
component: 'a',
target: '_blank',
rel: 'noreferrer',
variant: 'subtle',
});
const PhoneInput = TextInput.withProps({
label: 'Your phone number',
placeholder: 'Your phone number',
});
function Demo() {
return (
<>
{/* You can pass additional props to components created with `withProps` */}
<LinkButton href="https://mantine.dev">Mantine website</LinkButton>
{/* Component props override default props defined in `withProps` */}
<PhoneInput />
</>
);
}