React Native
How do I use Chips in React Native Paper?
Install react-native-paper, wrap your app in PaperProvider, and render a Chip with its label as the child. Use mode for flat or outlined, selected and onPress to toggle it, icon for a leading icon, and onClose to add a close button.
Updated October 31, 2026
Chips are the small rounded labels you see on filters, tags, and quick choices, and React Native Paper has one ready to use. If you’re here because a chip won’t stay selected or the check mark won’t show, start with its selected and icon props, since those control both, and they’re covered below.
How it works
Chip is a pressable label from react-native-paper, which is on version 5 as of this writing. It shows what you pass in, so selection lives in your state: you pass selected and flip it in onPress. Here are the main props:
mode:"flat"(the default) or"outlined"selected: shows the selected style, and by default a check mark (showSelectedCheck, on by default)icon: a leading icon by name, such as"tag", which replaces the check mark when the chip is selectedonClose: adds a close button and runs when it’s tapped, andcloseIconchanges its iconcompact: tighter horizontal padding when the chip only has a labeldisabled,elevated,showSelectedOverlay,textStyle, andstylefor the rest
How to add it
-
Install it along with the safe area library it needs from version 5 on:
npx expo install react-native-paper react-native-safe-area-contextIn an Expo app you don’t need to install icons separately, because the icon set comes with the
expopackage. -
Wrap your app in
PaperProvider. With Expo Router, that’s the root layout:import { Stack } from "expo-router"; import { PaperProvider } from "react-native-paper"; export default function RootLayout() { return ( <PaperProvider> <Stack /> </PaperProvider> ); } -
Render a row of chips people can select:
import { useState } from "react"; import { View } from "react-native"; import { Chip } from "react-native-paper"; const TAGS = ["Vegan", "Gluten free", "Spicy", "Under 30 min"]; export function TagFilter() { const [picked, setPicked] = useState<string[]>([]); const toggle = (tag: string) => setPicked((current) => current.includes(tag) ? current.filter((t) => t !== tag) : [...current, tag], ); return ( <View style={{ flexDirection: "row", flexWrap: "wrap", gap: 8 }}> {TAGS.map((tag) => ( <Chip key={tag} mode="outlined" selected={picked.includes(tag)} onPress={() => toggle(tag)} > {tag} </Chip> ))} </View> ); }For a single choice, keep one string in state instead of an array.
-
Make chips removable by adding
onClose, for exampleonClose={() => removeTag(tag)}on chips that show tags a person has already added.
How you know it works
Tapping a chip shows the check mark and the selected style, and tapping it again clears both. The close button removes the chip. With a screen reader on, each chip reads as a button, and the close button reads as “Close” unless you set closeIconAccessibilityLabel.
If it doesn’t look right
If the check mark never shows, check for an icon prop, because a chip with an icon shows that icon whether it’s selected or not. If each chip stretches across the screen, its parent is a column, so put the chips in a row with flexWrap: "wrap" as above, or give a lone chip alignSelf: "flex-start". And if your colors don’t match the rest of the app, we’d pass your theme to PaperProvider rather than styling each chip.
Ask the agent
If your app is in Draftbit, paste this into the agent, and it can read your code and make the change for you.
Add a row of filter chips above my list using React Native Paper. People should be able to select more than one, the selected chips should show a check mark, and the list should only show items that match.