React Native component used to select a single value from a range of values.
—
Advanced features for creating step-based sliders with custom markers, visual indicators, and step numbers for discrete value selection.
Custom component interface for rendering step indicators at specific slider positions.
interface MarkerProps {
/**
* Whether this step is currently selected/marked
*/
stepMarked: boolean;
/**
* Current value of the slider
*/
currentValue: number;
/**
* Index of this step marker
*/
index: number;
/**
* Minimum value of the slider
*/
min: number;
/**
* Maximum value of the slider
*/
max: number;
}
interface SliderStepProps {
/**
* Component to be rendered for each step indicator.
*/
StepMarker?: FC<MarkerProps>;
/**
* Whether to render step numbers.
*/
renderStepNumber?: boolean;
}Usage Examples:
import React from 'react';
import { View, Text } from 'react-native';
import Slider from '@react-native-community/slider';
import type { MarkerProps } from '@react-native-community/slider';
// Custom step marker component
const CustomStepMarker: React.FC<MarkerProps> = ({
stepMarked,
currentValue,
index,
min,
max
}) => {
return (
<View style={{
width: 12,
height: 12,
borderRadius: 6,
backgroundColor: stepMarked ? '#1fb28a' : '#d3d3d3',
borderWidth: 2,
borderColor: stepMarked ? '#ffffff' : '#999999',
}} />
);
};
// Slider with custom step markers
function StepMarkerSlider() {
return (
<Slider
style={{width: 300, height: 40}}
minimumValue={0}
maximumValue={10}
step={1}
value={5}
StepMarker={CustomStepMarker}
/>
);
}
// Advanced step marker with labels
const LabeledStepMarker: React.FC<MarkerProps> = ({
stepMarked,
currentValue,
index
}) => {
const labels = ['Min', 'Low', 'Med', 'High', 'Max'];
const label = labels[Math.floor(index / 2.5)] || index.toString();
return (
<View style={{ alignItems: 'center' }}>
<View style={{
width: 10,
height: 10,
borderRadius: 5,
backgroundColor: stepMarked ? '#FF6B6B' : '#CCCCCC',
}} />
<Text style={{
fontSize: 10,
marginTop: 4,
color: stepMarked ? '#FF6B6B' : '#666666',
}}>
{label}
</Text>
</View>
);
};
function LabeledStepSlider() {
return (
<Slider
style={{width: 280, height: 60}}
minimumValue={0}
maximumValue={10}
step={2.5}
value={5}
StepMarker={LabeledStepMarker}
/>
);
}Built-in step number rendering for displaying numeric values at step positions.
interface SliderStepNumberProps {
/**
* Whether to render step numbers.
*/
renderStepNumber?: boolean;
}Usage Examples:
import React, { useState } from 'react';
import Slider from '@react-native-community/slider';
// Slider with step numbers
function StepNumberSlider() {
const [value, setValue] = useState(5);
return (
<Slider
style={{width: 300, height: 50}}
minimumValue={0}
maximumValue={10}
step={1}
value={value}
onValueChange={setValue}
renderStepNumber={true}
/>
);
}
// Rating slider with numbers
function RatingSlider() {
const [rating, setRating] = useState(3);
return (
<View>
<Text>Rating: {rating}/5</Text>
<Slider
style={{width: 250, height: 50}}
minimumValue={1}
maximumValue={5}
step={1}
value={rating}
onValueChange={setRating}
renderStepNumber={true}
/>
</View>
);
}Using both custom markers and step numbers together.
interface CombinedStepProps {
StepMarker?: FC<MarkerProps>;
renderStepNumber?: boolean;
}Usage Examples:
import React, { useState } from 'react';
import { View, Text } from 'react-native';
import Slider from '@react-native-community/slider';
// Star rating marker
const StarMarker: React.FC<MarkerProps> = ({ stepMarked }) => {
return (
<Text style={{
fontSize: 20,
color: stepMarked ? '#FFD700' : '#CCCCCC',
}}>
★
</Text>
);
};
// Combined star markers with numbers
function StarRatingSlider() {
const [rating, setRating] = useState(3);
return (
<View>
<Text>Star Rating: {rating}/5</Text>
<Slider
style={{width: 250, height: 60}}
minimumValue={1}
maximumValue={5}
step={1}
value={rating}
onValueChange={setRating}
StepMarker={StarMarker}
renderStepNumber={true}
/>
</View>
);
}Complex step configurations with dynamic markers and conditional rendering.
Usage Examples:
import React, { useState } from 'react';
import { View, Text } from 'react-native';
import Slider from '@react-native-community/slider';
// Dynamic step marker based on value ranges
const DynamicStepMarker: React.FC<MarkerProps> = ({
stepMarked,
currentValue,
index,
min,
max
}) => {
const percentage = ((index - min) / (max - min)) * 100;
let color = '#CCCCCC';
if (stepMarked) {
if (percentage < 25) color = '#FF4444'; // Red for low values
else if (percentage < 50) color = '#FF8800'; // Orange
else if (percentage < 75) color = '#FFDD00'; // Yellow
else color = '#44FF44'; // Green for high values
}
return (
<View style={{
width: 8 + (stepMarked ? 4 : 0),
height: 8 + (stepMarked ? 4 : 0),
borderRadius: 6,
backgroundColor: color,
borderWidth: stepMarked ? 2 : 1,
borderColor: '#FFFFFF',
}} />
);
};
// Progress/level slider
function ProgressSlider() {
const [progress, setProgress] = useState(50);
const getProgressLabel = (value: number) => {
if (value < 25) return 'Beginner';
if (value < 50) return 'Intermediate';
if (value < 75) return 'Advanced';
return 'Expert';
};
return (
<View>
<Text>Progress: {progress}% - {getProgressLabel(progress)}</Text>
<Slider
style={{width: 300, height: 50}}
minimumValue={0}
maximumValue={100}
step={10}
value={progress}
onValueChange={setProgress}
StepMarker={DynamicStepMarker}
renderStepNumber={true}
/>
</View>
);
}import type { FC } from 'react';
interface MarkerProps {
stepMarked: boolean;
currentValue: number;
index: number;
min: number;
max: number;
}
interface TrackMarksProps {
isTrue: boolean;
index: number;
thumbImage?: ImageURISource;
StepMarker?: FC<MarkerProps>;
currentValue: number;
min: number;
max: number;
}
interface SliderStepProps {
StepMarker?: FC<MarkerProps>;
renderStepNumber?: boolean;
}// Internal component for rendering step indicators (not directly exported)
interface StepsIndicatorProps {
options: number[];
sliderWidth: number;
currentValue: number;
StepMarker?: FC<MarkerProps>;
renderStepNumber?: boolean;
thumbImage?: ImageURISource;
isLTR?: boolean;
}
// Internal component for step numbers (not directly exported)
interface StepNumberProps {
i: number;
style: StyleProp<TextStyle>;
}Install with Tessl CLI
npx tessl i tessl/npm-react-native-community--slider