Skip to main content
Version: v0.30.x

Haptics

Native wheels tick under your finger. Get the same feel with onValueChanging, which fires on every row crossing while scrolling, and on every step while dragging a slider. The library has no haptics dependency, so bring the one you already use.

expo-haptics​

npx expo install expo-haptics
import * as Haptics from 'expo-haptics';
import { WheelPicker, TimePicker, DatePicker } from '@elik56a/react-native-pickers';

const tick = () => Haptics.selectionAsync();

<WheelPicker items={items} value={v} onChange={setV} onValueChanging={tick} />
<TimePicker value={t} onChange={setT} onValueChanging={tick} />
<DatePicker display="wheel" value={d} onChange={setD} onValueChanging={tick} />

react-native-haptic-feedback​

import ReactNativeHapticFeedback from 'react-native-haptic-feedback';

const tick = () => ReactNativeHapticFeedback.trigger('selection', { enableVibrateFallback: false });
<WheelPicker onValueChanging={tick} … />

Confirm haptics​

For a stronger buzz when a value is confirmed, use onChange or a sheet's onConfirm:

<DatePickerSheet
…
onConfirm={(range) => {
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
setRange(range);
}}
/>

Which components support onValueChanging​

ComponentCallback argument
WheelPicker(value, index)
MultiWheelPicker columns(value, index) per column
TimePicker / TimePickerSheet(date)
DateWheelPicker / DatePicker display="wheel"(date)
DateTimePicker display="wheel" / DateTimePickerSheet(date)
DurationPicker / DurationPickerSheet(seconds)
WheelPickerSheet(value, index)
Slider(value), or [start, end] when range is set

In the time, date and duration pickers it fires from the wheels only: a dial, number boxes or clickable columns don't call it. Disabled rows don't trigger it either.