Back to Ant Design

ConfigProvider

components/config-provider/index.en-US.md

6.3.727.3 KB
Original Source

Usage

This component provides a configuration to all React components underneath itself via the context API. In the render tree all components will have access to the provided config.

tsx
import React from 'react';
import { ConfigProvider } from 'antd';

// ...
const Demo: React.FC = () => (
  <ConfigProvider direction="rtl">
    <App />
  </ConfigProvider>
);

export default Demo;

Content Security Policy {#csp}

Some components use dynamic style to support wave effect. You can config csp prop if Content Security Policy (CSP) is enabled:

tsx
<ConfigProvider csp={{ nonce: 'YourNonceCode' }}>
  <Button>My Button</Button>
</ConfigProvider>

Examples

<!-- prettier-ignore -->

<code src="./demo/locale.tsx">Locale</code> <code src="./demo/direction.tsx">Direction</code> <code src="./demo/size.tsx">Component size</code> <code src="./demo/theme.tsx">Theme</code> <code src="./demo/wave.tsx">Custom Wave</code> <code src="./demo/holderRender.tsx">Static function</code> <code src="./demo/prefixCls.tsx" debug>prefixCls</code> <code src="./demo/useConfig.tsx" debug>useConfig</code> <code src="./demo/warning.tsx" debug>warning</code>

API

PropertyDescriptionTypeDefaultVersion
componentDisabledConfig antd component disabledboolean-4.21.0
componentSizeConfig antd component sizesmall | medium | large-
cspSet Content Security Policy config{ nonce: string }-
directionSet direction of layout. See demoltr | rtlltr
getPopupContainerTo set the container of the popup element. The default is to create a div element in body(trigger?: HTMLElement) => HTMLElement | ShadowRoot() => document.body
getTargetContainerConfig Affix, Anchor scroll target container() => HTMLElement | Window | ShadowRoot() => window4.2.0
iconPrefixClsSet icon prefix classNamestringanticon4.11.0
localeLanguage package setting, you can find the packages in antd/localeobject-
popupMatchSelectWidthDetermine whether the dropdown menu and the select input are the same width. Default set min-width same as input. Will ignore when value less than select width. false will disable virtual scrollboolean | number-5.5.0
popupOverflowSelect like component popup logic. Can set to show in viewport or follow window scroll'viewport' | 'scroll' <InlinePopover previewURL="https://user-images.githubusercontent.com/5378891/230344474-5b9f7e09-0a5d-49e8-bae8-7d2abed6c837.png"></InlinePopover>'viewport'5.5.0
prefixClsSet prefix classNamestringant
renderEmptySet empty content of components. Ref Emptyfunction(componentName: string): ReactNode-
themeSet theme, ref Customize ThemeTheme-5.0.0
variantSet variant of data entry componentsoutlined | filled | borderless-5.19.0
virtualDisable virtual scroll when set to falseboolean-4.3.0
warningConfig warning level, when strict is false, it will aggregate deprecated information into a single message{ strict: boolean }-5.10.0
autoInsertSpaceInButtonButton auto spacing config, please use button={{ autoInsertSpace: boolean }} insteadboolean--
dropdownMatchSelectWidthDetermine whether the dropdown menu and the select input are the same width, please use popupMatchSelectWidth insteadboolean--

ConfigProvider.config() {#config}

Setting Modal, Message, Notification static config. Not work on hooks.

tsx
ConfigProvider.config({
  // 5.13.0+
  holderRender: (children) => (
    <ConfigProvider
      prefixCls="ant"
      iconPrefixCls="anticon"
      theme={{ token: { colorPrimary: 'red' } }}
    >
      {children}
    </ConfigProvider>
  ),
});

ConfigProvider.useConfig() <Badge>5.3.0+</Badge> {#useconfig}

Get the value of the parent Provider, Such as DisabledContextProvider, SizeContextProvider.

jsx
const {
  componentDisabled, // 5.3.0+
  componentSize, // 5.3.0+
} = ConfigProvider.useConfig();
PropertyDescriptionTypeDefaultVersion
componentDisabledantd component disabled stateboolean-5.3.0
componentSizeantd component size statesmall | medium | large-5.3.0

Component Config

PropertyDescriptionTypeDefaultVersion
affixSet Affix common props{ className?: string, style?: React.CSSProperties }-6.0.0
alertSet Alert common props{ className?: string, style?: React.CSSProperties, closeIcon?: React.ReactNode, successIcon?: React.ReactNode, infoIcon?: React.ReactNode, warningIcon?: React.ReactNode, errorIcon?: React.ReactNode }-5.7.0, closeIcon: 5.14.0, successIcon, infoIcon, warningIcon and errorIcon: 6.2.0
anchorSet Anchor common props{ className?: string, style?: React.CSSProperties, classNames?: AnchorStyleConfig["classNames"], styles?: AnchorStyleConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
avatarSet Avatar common props{ className?: string, style?: React.CSSProperties }-5.7.0
badgeSet Badge common props{ className?: string, style?: React.CSSProperties, classNames?: BadgeProps["classNames"], styles?: BadgeProps["styles"] }-5.7.0
breadcrumbSet Breadcrumb common props{ className?: string, style?: React.CSSProperties, classNames?: BreadcrumbConfig["classNames"], styles?: BreadcrumbConfig["styles"], separator?: ReactNode, dropdownIcon?: ReactNode }-5.7.0, classNames, separator and styles: 6.0.0, dropdownIcon: 6.2.0
buttonSet Button common props{ className?: string, style?: React.CSSProperties, classNames?: ButtonProps["classNames"], styles?: ButtonProps["styles"], autoInsertSpace?: boolean, variant?: ButtonVariantType, color?: ButtonColorType, shape?: ButtonProps["shape"], loadingIcon?: ReactNode }-5.6.0, autoInsertSpace: 5.17.0, variant and color: 5.25.0, shape: 5.27.0, loadingIcon: 6.3.0
cardSet Card common props{ className?: string, style?: React.CSSProperties, classNames?: CardProps["classNames"], styles?: CardProps["styles"] }-5.7.0, classNames and styles: 5.14.0
cardMetaSet Card.Meta common props{ className?: string, style?: React.CSSProperties, classNames?: CardMetaProps["classNames"], styles?: CardMetaProps["styles"] }-6.0.0
calendarSet Calendar common props{ className?: string, style?: React.CSSProperties, classNames?: CalendarConfig["classNames"], styles?: CalendarConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
carouselSet Carousel common props{ className?: string, style?: React.CSSProperties }-5.7.0
cascaderSet Cascader common props{ className?: string, style?: React.CSSProperties, classNames?: CascaderConfig["classNames"], styles?: CascaderConfig["styles"], expandIcon?: React.ReactNode, loadingIcon?: React.ReactNode }-5.7.0, classNames and styles: 6.0.0, expandIcon and loadingIcon: 6.3.0
checkboxSet Checkbox common props{ className?: string, style?: React.CSSProperties, classNames?: CheckboxConfig["classNames"], styles?: CheckboxConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
collapseSet Collapse common props{ className?: string, style?: React.CSSProperties, expandIcon?: (props) => ReactNode, classNames?: CollapseProps["classNames"], styles?: CollapseProps["styles"] }-5.7.0, expandIcon: 5.15.0, classNames and styles: 6.0.0
colorPickerSet ColorPicker common props{ className?: string, style?: React.CSSProperties, classNames?: ColorPickerConfig["classNames"], styles?: ColorPickerConfig["styles"] }-5.7.0
datePickerSet datePicker common props{ className?: string, style?: React.CSSProperties, classNames?: DatePickerConfig["classNames"], styles?: DatePickerConfig["styles"], suffixIcon?: React.ReactNode }-5.7.0, suffixIcon: 6.3.0
rangePickerSet rangePicker common props{ className?: string, style?: React.CSSProperties, separator?: React.ReactNode }-5.11.0, separator: 6.3.0
descriptionsSet Descriptions common props{ className?: string, style?: React.CSSProperties, classNames?: DescriptionsProps["classNames"], styles?: DescriptionsProps["styles"] }-5.7.0, classNames and styles: 5.23.0
dividerSet Divider common props{ className?: string, style?: React.CSSProperties, classNames?: DividerProps["classNames"], styles?: DividerProps["styles"] }-
drawerSet Drawer common props{ className?: string, style?: React.CSSProperties, classNames?: DrawerProps["classNames"], styles?: DrawerProps["styles"], closeIcon?: ReactNode, closable?: DrawerProps["closable"] }-5.7.0, classNames and styles: 5.10.0, closeIcon: 5.14.0
dropdownSet Dropdown common props{ className?: string, style?: React.CSSProperties, classNames?: DropdownConfig["classNames"], styles?: DropdownConfig["styles"] }-
emptySet Empty common props{ className?: string, style?: React.CSSProperties, classNames?: EmptyProps["classNames"], styles?: EmptyProps["styles"], image?: ReactNode }-5.7.0, classNames and styles: 5.23.0, image: 5.27.0
flexSet Flex common props{ className?: string, style?: React.CSSProperties, vertical?: boolean }-5.10.0
floatButtonSet FloatButton common props{ className?: string, style?: React.CSSProperties, classNames?: FloatButtonProps["classNames"], styles?: FloatButtonProps["styles"], backTopIcon?: React.ReactNode }-
floatButtonGroupSet FloatButton.Group common props{ closeIcon?: React.ReactNode, className?: string, style?: React.CSSProperties, classNames?: FloatButtonProps["classNames"], styles?: FloatButtonProps["styles"] }-
formSet Form common props{ className?: string, style?: React.CSSProperties, validateMessages?: ValidateMessages, requiredMark?: boolean | optional, scrollToFirstError?: boolean | Options, classNames?:FormConfig["classNames"], styles?: FormConfig["styles"], tooltip?: TooltipProps & { icon?: ReactNode } }-requiredMark: 4.8.0; colon: 4.18.0; scrollToFirstError: 5.2.0; className and style: 5.7.0; tooltip: 6.3.0
imageSet Image common props{ className?: string, style?: React.CSSProperties, preview?: { closeIcon?: React.ReactNode, classNames?:ImageConfig["classNames"], styles?: ImageConfig["styles"] }, fallback?: string }-5.7.0, closeIcon: 5.14.0, classNames and styles: 6.0.0
inputSet Input common props{ autoComplete?: string, className?: string, style?: React.CSSProperties, allowClear?: boolean | { clearIcon?: ReactNode } }-4.2.0, allowClear: 5.15.0
inputNumberSet InputNumber common props{ className?: string, style?: React.CSSProperties, classNames?: InputNumberConfig["classNames"], styles?: InputNumberConfig["styles"] }-
otpSet OTP common props{ className?: string, style?: React.CSSProperties, classNames?: OTPConfig["classNames"], styles?: OTPConfig["styles"] }-
inputSearchSet Search common props{ className?: string, style?: React.CSSProperties, classNames?: InputSearchConfig["classNames"], styles?: InputSearchConfig["styles"] }-
textAreaSet TextArea common props{ autoComplete?: string, className?: string, style?: React.CSSProperties,classNames?:TextAreaConfig["classNames"], styles?: TextAreaConfig["styles"], allowClear?: boolean | { clearIcon?: ReactNode } }-5.15.0
layoutSet Layout common props{ className?: string, style?: React.CSSProperties }-5.7.0
listSet List common props{ className?: string, style?: React.CSSProperties, item?:{ classNames: ListItemProps["classNames"], styles: ListItemProps["styles"] } }-5.7.0
masonrySet Masonry common props{ className?: string, style?: React.CSSProperties, classNames?: MasonryProps["classNames"], styles?: MasonryProps["styles"] }-
menuSet Menu common props{ className?: string, style?: React.CSSProperties, expandIcon?: ReactNode | props => ReactNode }-5.7.0, expandIcon: 5.15.0
mentionsSet Mentions common props{ className?: string, style?: React.CSSProperties, classNames?:MentionsConfig["classNames"], styles?: MentionsConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
messageSet Message common props{ className?: string, style?: React.CSSProperties, classNames?: MessageConfig["classNames"], styles?: MessageConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
modalSet Modal common props{ className?: string, style?: React.CSSProperties, classNames?: ModalProps["classNames"], styles?: ModalProps["styles"], closeIcon?: React.ReactNode }-5.7.0, classNames and styles: 5.10.0, closeIcon: 5.14.0
notificationSet Notification common props{ className?: string, style?: React.CSSProperties, closeIcon?: React.ReactNode, classNames?: NotificationConfig["classNames"], styles?: NotificationConfig["styles"] }-5.7.0, closeIcon: 5.14.0, classNames and styles: 6.0.0
paginationSet Pagination common props{ showSizeChanger?: boolean, totalBoundaryShowSizeChanger?: number, className?: string, style?: React.CSSProperties,classNames?:PaginationConfig["classNames"], styles?: PaginationConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
progressSet Progress common props{ className?: string, style?: React.CSSProperties, classNames?: ProgressConfig["classNames"], styles?: ProgressConfig["styles"] }-
radioSet Radio common props{ className?: string, style?: React.CSSProperties, classNames?: RadioConfig["classNames"], styles?: RadioConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
rateSet Rate common props{ className?: string, style?: React.CSSProperties }-5.7.0
resultSet Result common props{ className?: string, style?: React.CSSProperties , classNames?: ResultProps["classNames"], styles?: ResultProps["styles"]}-5.7.0, classNames and styles: 6.0.0
ribbonSet Ribbon common props{ className?: string, style?: React.CSSProperties, classNames?: RibbonProps["classNames"], styles?: RibbonProps["styles"] }-6.0.0
skeletonSet Skeleton common props{ className?: string, style?: React.CSSProperties, classNames?: SkeletonProps["classNames"], styles?: SkeletonProps["styles"] }-5.7.0, classNames and styles: 6.0.0
segmentedSet Segmented common props{ className?: string, style?: React.CSSProperties, classNames?: SegmentedProps["classNames"], styles?: SegmentedProps["styles"] }-5.7.0, classNames and styles: 6.0.0
selectSet Select common props{ className?: string, showSearch?: boolean, style?: React.CSSProperties, classNames?: SelectConfig["classNames"], styles?: SelectConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
sliderSet Slider common props{ className?: string, style?: React.CSSProperties, classNames?: SliderProps["classNames"], styles?: SliderProps["styles"] }-5.7.0, classNames and styles: 5.23.0
switchSet Switch common props{ className?: string, style?: React.CSSProperties, classNames?: SwitchStyleConfig["classNames"], styles?: SwitchStyleConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
spaceSet Space common props, ref Space{ size: small | middle | large | number, className?: string, style?: React.CSSProperties, classNames?: SpaceProps["classNames"], styles?: SpaceProps["styles"] }-5.6.0
splitterSet Splitter common props{ className?: string, style?: React.CSSProperties, classNames?:Splitter["classNames"], styles?: Splitter["styles"] }-5.21.0
spinSet Spin common props{ className?: string, style?: React.CSSProperties, indicator?: React.ReactElement, classNames?:SpinConfig["classNames"], styles?: SpinConfig["styles"] }-5.7.0, indicator: 5.20.0, classNames and styles: 6.0.0
statisticSet Statistic common props{ className?: string, style?: React.CSSProperties, classNames?: StatisticProps["classNames"], styles?: StatisticProps["styles"]}-5.7.0, classNames and styles: 6.0.0
stepsSet Steps common props{ className?: string, style?: React.CSSProperties, classNames?:StepsConfig["classNames"], styles?: StepsConfig["styles"] }-
tableSet Table common props{ className?: string, style?: React.CSSProperties, expandable?: { expandIcon?: props => React.ReactNode }, rowKey?: TableProps["rowKey"], scroll?: TableProps["scroll"], classNames?: TableProps["classNames"], styles?: TableProps["styles"] }-scroll: 6.2.0
tabsSet Tabs common props{ className?: string, style?: React.CSSProperties, indicator?: { size?: GetIndicatorSize, align?: start | center | end }, moreIcon?: ReactNode, addIcon?: ReactNode, removeIcon?: ReactNode, classNames?: TabsConfig["classNames"], styles?: TabsConfig["styles"] }-5.7.0, moreIcon and addIcon: 5.14.0, removeIcon: 5.15.0, classNames and styles: 6.0.0
tagSet Tag common props{ className?: string, style?: React.CSSProperties, closeIcon?: React.ReactNode, classNames?: TagProps["classNames"], styles?: TagProps["styles"] }-5.7.0, closeIcon: 5.14.0, classNames and styles: 6.0.0
timelineSet Timeline common props{ className?: string, style?: React.CSSProperties, classNames?: TimelineConfig["classNames"], styles?: TimelineConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
timePickerSet TimePicker common props{ className?: string, style?: React.CSSProperties, classNames?: TimePickerConfig["classNames"], styles?: TimePickerConfig["styles"], suffixIcon?: React.ReactNode }-5.7.0, suffixIcon: 6.3.0
tourSet Tour common props{ closeIcon?: React.ReactNode, className?: string, style?: React.CSSProperties, classNames?: TourProps["classNames"], styles?: TourProps["styles"] }-5.14.0, classNamesstylesclassNamestyle: 6.0.0
tooltipSet Tooltip common props{ className?: string, style?: React.CSSProperties, classNames?:Tooltip["classNames"], styles?: Tooltip["styles"], arrow: boolean | { pointAtCenter: boolean }, unique?: boolean, trigger?: Tooltip["trigger"] }-
popoverSet Popover common props{ className?: string, style?: React.CSSProperties, classNames?:Popover["classNames"], styles?: Popover["styles"], arrow: boolean | { pointAtCenter: boolean }, trigger?: Popover["trigger"]}-5.23.0, arrow: 6.0.0, trigger: 6.1.0
popconfirmSet Popconfirm common props{ className?: string, style?: React.CSSProperties, classNames?:Popconfirm["classNames"], styles?: Popconfirm["styles"], arrow: boolean | { pointAtCenter: boolean }, trigger?: Popconfirm["trigger"]}-5.23.0, arrow: 6.0.0, trigger: 6.1.0
qrcodeSet QRCode common props{ className?: string, style?: React.CSSProperties, classNames?:QRCode["classNames"], styles?: QRCode["styles"] }-
transferSet Transfer common props{ className?: string, style?: React.CSSProperties, classNames?: TransferConfig["classNames"], styles?: TransferConfig["styles"], selectionsIcon?: React.ReactNode }-
treeSet Tree common props{ className?: string, style?: React.CSSProperties, classNames?: TreeConfig["classNames"], styles?: TreeConfig["styles"] }-5.7.0, classNames and styles: 6.0.0
treeSelectSet TreeSelect common props{ className?: string, style?: React.CSSProperties, classNames?: TreeSelectConfig["classNames"], styles?: TreeSelectConfig["styles"], switcherIcon?: TreeSelect["switcherIcon"]}-
typographySet Typography common props{ className?: string, style?: React.CSSProperties }-5.7.0
uploadSet Upload common props{ className?: string, style?: React.CSSProperties, classNames?:UploadConfig["classNames"], styles?: UploadConfig["styles"], customRequest?: Upload["customRequest"] }-5.7.0, customRequest: 5.27.0, classNames and styles: 6.0.0
waveConfig wave effect{ disabled?: boolean, showEffect?: (node: HTMLElement, info: { className, token, component }) => void }-5.8.0

FAQ

How to contribute a new language? {#faq-add-locale}

See <Adding new language>.

See FAQ Date-related-components-locale-is-not-working?

Related issue: https://github.com/ant-design/ant-design/issues/19974

When you config getPopupContainer to parentNode globally, Modal will throw error of triggerNode is undefined because it did not have a triggerNode. You can try the fix below.

diff
 <ConfigProvider
-  getPopupContainer={triggerNode => triggerNode.parentNode}
+  getPopupContainer={node => {
+    if (node) {
+      return node.parentNode;
+    }
+    return document.body;
+  }}
 >
   <App />
 </ConfigProvider>

Why can't ConfigProvider props (like prefixCls and theme) affect ReactNode inside message.info, notification.open, Modal.confirm? {#faq-message-inherit}

antd will dynamic create React instance by ReactDOM.render when call message methods. Whose context is different with origin code located context. We recommend useMessage, useNotification and useModal which , the methods came from message/notification/Modal has been deprecated in 5.x.

Locale is not working with Vite in production mode? {#faq-vite-locale-not-work}

Related issue: #39045

In production mode of Vite, default exports from cjs file should be used like this: enUS.default. So you can directly import locale from es/ directory like import enUS from 'antd/es/locale/en_US' to make dev and production have the same behavior.

prefixCls priority(The former is covered by the latter) {#faq-prefixcls-priority}

  1. ConfigProvider.config({ prefixCls: 'prefix-1' })
  2. ConfigProvider.config({ holderRender: (children) => <ConfigProvider prefixCls="prefix-2">{children}</ConfigProvider> })
  3. message.config({ prefixCls: 'prefix-3' })