React Country Flag Component
The `react-country-flag` package provides a React component designed for displaying country flags, offering flexibility through both emoji and SVG renditions. Currently stable at version `3.1.0`, this library is actively maintained, with its latest major update (v3) primarily focusing on introducing comprehensive TypeScript type definitions, enhancing developer experience without breaking changes from the previous major version. Earlier, `v2.x` introduced several breaking changes related to prop naming and accessibility responsibilities, which developers upgrading from `v1.x` should be aware of. A key differentiator is its ability to choose between emoji or SVG rendering, with support for custom SVG CDN configurations, allowing for highly customizable and performant flag display. It passes all standard HTML attributes to the underlying element, providing full control over styling and accessibility. While supporting emoji flags, the library also acknowledges potential cross-platform display inconsistencies and implicitly encourages developers to consider emoji support detection or to leverage its robust SVG rendering capabilities for maximum compatibility.
Common errors
-
TypeError: (0 , react_country_flag__WEBPACK_IMPORTED_MODULE_2__.default) is not a function
cause Attempting to import `ReactCountryFlag` as a named export when it is a default export in the package.fixChange `import { ReactCountryFlag } from 'react-country-flag'` to `import ReactCountryFlag from 'react-country-flag'`. -
Property 'code' does not exist on type 'ReactCountryFlagProps'. Did you mean 'countryCode'?
cause Using the deprecated `code` prop instead of the updated `countryCode` prop, which was a breaking change in v2.0.0.fixUpdate the prop from `code="US"` to `countryCode="US"`. -
Flags are not showing up or appear as blank squares in the browser.
cause This often occurs when emoji flags are used on a system or browser that lacks sufficient emoji font support, or if there's an issue with the `cdnUrl` or `cdnSuffix` when using SVG flags.fixIf using emoji flags, verify emoji support on the target system/browser or switch to SVG flags by adding the `svg` prop. If using SVG flags with a custom CDN, double-check that `cdnUrl` and `cdnSuffix` are correctly configured and accessible.
Warnings
- breaking The prop `code` was renamed to `countryCode`. Using `code` will no longer work and may result in a TypeScript error or unhandled prop.
- breaking The default `title` and `aria-label` attributes for accessibility were removed. Developers are now responsible for passing these props explicitly.
- breaking The prop `styleProps` was renamed to `style` to align with standard React prop naming conventions.
- gotcha Emoji flags (`svg` prop not used) may not display consistently across all browsers and operating systems due to varying emoji font support.
Install
-
npm install react-country-flag -
yarn add react-country-flag -
pnpm add react-country-flag
Imports
- ReactCountryFlag
import { ReactCountryFlag } from 'react-country-flag'import ReactCountryFlag from 'react-country-flag'
- ReactCountryFlag (CommonJS)
const ReactCountryFlag = require('react-country-flag') - ReactCountryFlagProps
import { ReactCountryFlagProps } from 'react-country-flag'import type { ReactCountryFlagProps } from 'react-country-flag'
Quickstart
import React from "react"
import ReactCountryFlag from "react-country-flag"
function ExampleComponent() {
return (
<div>
<ReactCountryFlag countryCode="US" />
<ReactCountryFlag
className="emojiFlag"
countryCode="US"
style={{
fontSize: '2em',
lineHeight: '2em',
}}
aria-label="United States"
/>
<ReactCountryFlag countryCode="US" svg />
<ReactCountryFlag
countryCode="US"
svg
style={{
width: '2em',
height: '2em',
}}
title="US"
/>
<ReactCountryFlag
countryCode="US"
svg
cdnUrl="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.4.3/flags/1x1/"
cdnSuffix="svg"
title="US"
/>
</div>
)
}
export default ExampleComponent