A fully customizable, animated checkbox group component for React Native applications.
We're excited to announce the release of version 2.0.0 with several new features and improvements:
- Multiple Selection Mode: Now supports selecting multiple checkboxes with the
multiple
prop - Always Select Mode: Ensures one checkbox is always selected with the
alwaysSelect
prop - Improved Type Support: Better TypeScript definitions and support for both string and numeric IDs
- Animation Control: Customize animation duration with the
animationDuration
prop - Flexible Spacing: Control spacing between checkboxes with the
spacing
prop
- Single and multiple selection support
- "Always selected" mode to ensure one option is always chosen
- Horizontal and vertical layouts
- Customizable animations and spacing
- TypeScript support
- Flexible styling options
- Bouncy animation effects
npm install react-native-bouncy-checkbox-group
# or
yarn add react-native-bouncy-checkbox-group
This package requires react-native-bouncy-checkbox
version 4.1.2 or higher. If you haven't installed it yet:
npm install react-native-bouncy-checkbox@latest
# or
yarn add react-native-bouncy-checkbox@latest
import BouncyCheckboxGroup, { CheckboxItem } from 'react-native-bouncy-checkbox-group';
const data = [
{
id: 0,
text: 'Option 1',
fillColor: '#ff7473',
unfillColor: '#fbbfbb',
},
{
id: 1,
text: 'Option 2',
fillColor: '#5567e9',
unfillColor: '#afb5f5',
},
];
// Inside your component
<BouncyCheckboxGroup
data={data}
onChange={(selectedItem) => {
console.log('Selected:', selectedItem);
}}
/>
<BouncyCheckboxGroup
data={data}
initial={0} // Set initial selection to item with id=0
spacing={8} // Add spacing between items
onChange={(selectedItem) => {
console.log('Selected:', selectedItem);
}}
/>
The alwaysSelect
feature ensures that one checkbox must always be selected in single selection mode. This is useful for cases where having no selection is not a valid state, like radio button groups.
<BouncyCheckboxGroup
data={data}
initial={0} // Set initial selection
alwaysSelect={true} // Prevent deselection of the selected item
onChange={(selectedItem) => {
console.log('Selected:', selectedItem);
}}
/>
With alwaysSelect
enabled:
- One checkbox is always selected
- Users can change selection by tapping a different checkbox
- Attempting to deselect the currently selected checkbox has no effect
- If no
initial
value is set, the first item is automatically selected
Enable choosing multiple options simultaneously:
<BouncyCheckboxGroup
data={data}
multiple={true} // Enable multiple selection
initial={[0, 2]} // Optional initial selections
onChange={(selectedItems) => {
console.log('Selected:', selectedItems);
}}
/>
Change the orientation to vertical:
<BouncyCheckboxGroup
data={data}
style={{ flexDirection: 'column' }}
onChange={(selectedItem) => {
console.log('Selected:', selectedItem);
}}
/>
<BouncyCheckboxGroup
data={data}
animationDuration={100} // Faster animation (default: 300ms)
spacing={12} // Add 12 pixels between checkboxes
onChange={(selectedItem) => {
console.log('Selected:', selectedItem);
}}
/>
The data
array accepts all properties from the react-native-bouncy-checkbox
package:
const customData = [
{
id: 0,
text: 'Custom Option',
fillColor: '#ff7473',
unfillColor: '#ffffff',
textStyle: {
textDecorationLine: 'none',
fontSize: 16,
color: '#333'
},
iconStyle: {
borderRadius: 8,
borderColor: '#ff7473'
},
size: 24
},
];
If you need to control the checkbox state from outside, you can use the useBuiltInState
prop in your checkbox items:
const [myState, setMyState] = useState(false);
const customData = [
{
id: 0,
text: 'Externally Controlled',
isChecked: myState,
useBuiltInState: false, // Disable internal state management
onPress: (checked) => {
setMyState(!myState); // Update your own state
}
},
// More items...
];
You can programmatically reset checkbox selection by managing state externally:
const [selectedId, setSelectedId] = useState(0); // Start with initial selection
// Reset function
const resetSelection = () => {
setSelectedId(null); // Set to null to clear selection
};
// In your component
return (
<>
<BouncyCheckboxGroup
data={checkboxData}
initial={selectedId}
onChange={(selectedItem) => {
// If you want default behavior (clicking selected item deselects it)
// just use alwaysSelect={false} (the default)
// For programmatic control:
setSelectedId(selectedItem.id);
}}
/>
<Button title="Reset Selection" onPress={resetSelection} />
</>
);
Note: By default (
alwaysSelect={false}
), clicking an already selected checkbox will deselect it. UsealwaysSelect={true}
for radio button behavior where one checkbox must always be selected.
Prop | Type | Default | Description |
---|---|---|---|
data |
CheckboxItem[] |
Required | Array of checkbox items |
onChange |
(selectedItem: CheckboxItem | CheckboxItem[]) => void |
Required | Callback when selection changes |
style |
StyleProp<ViewStyle> |
undefined |
Container style |
initial |
SelectionID | SelectionID[] |
undefined |
Initial selected item(s) by ID |
multiple |
boolean |
false |
Enable multiple selection |
alwaysSelect |
boolean |
false |
Ensures one checkbox is always selected (single select mode only) |
animationDuration |
number |
300 |
Duration of bounce animation in ms |
spacing |
number |
0 |
Spacing between checkbox items |
itemContainerStyle |
StyleProp<ViewStyle> |
undefined |
Style for each checkbox container |
checkboxProps |
BouncyCheckboxProps |
undefined |
Props applied to all checkboxes |
The CheckboxItem
interface extends all props from react-native-bouncy-checkbox
with an added required id
field:
Prop | Type | Default | Description |
---|---|---|---|
id |
string | number |
Required | Unique identifier for the checkbox |
text |
string |
undefined |
Text label for the checkbox |
isChecked |
boolean |
undefined |
Control the checked state externally |
useBuiltInState |
boolean |
true |
Set to false to manually control checkbox state |
fillColor |
string |
#f09f48 |
Color when checked |
unfillColor |
string |
transparent |
Color when unchecked |
textStyle |
StyleProp<TextStyle> |
Default | Style for the text label |
iconStyle |
StyleProp<ViewStyle> |
Default | Style for the checkbox icon |
... | ... | ... | All other props from BouncyCheckbox |
Check out the example
folder for a fully working demo app that demonstrates all features.
MIT