diff --git a/package/src/Slider.tsx b/package/src/Slider.tsx index c452ef9c..55252f02 100644 --- a/package/src/Slider.tsx +++ b/package/src/Slider.tsx @@ -1,4 +1,4 @@ -import React, {useEffect, useState} from 'react'; +import React, {useEffect, useMemo, useState} from 'react'; import { Image, Platform, @@ -239,11 +239,15 @@ const SliderComponent = ( const defaultStep = (maximumValue - minimumValue) / stepResolution; const stepLength = step || defaultStep; - const options = Array.from( - { - length: (step ? defaultStep : stepResolution) + 1, - }, - (_, index) => minimumValue + index * stepLength, + const options = useMemo( + () => + Array.from( + { + length: (step ? defaultStep : stepResolution) + 1, + }, + (_, index) => minimumValue + index * stepLength, + ), + [step, defaultStep, stepResolution, minimumValue, stepLength], ); const defaultStyle = @@ -284,6 +288,16 @@ const SliderComponent = ( const passedValue = Number.isNaN(value) || !value ? undefined : value; + const resolvedThumbImage = useMemo( + () => + Platform.OS === 'web' + ? props.thumbImage + : props.StepMarker || !props.thumbImage + ? undefined + : Image.resolveAssetSource(props.thumbImage as ImageSourcePropType), + [props.thumbImage, props.StepMarker], + ); + useEffect(() => { if (lowerLimit >= upperLimit) { console.warn( @@ -320,13 +334,7 @@ const SliderComponent = ( lowerLimit={lowerLimit} upperLimit={upperLimit} accessibilityState={_accessibilityState} - thumbImage={ - Platform.OS === 'web' - ? props.thumbImage - : props.StepMarker || !props.thumbImage - ? undefined - : Image.resolveAssetSource(props.thumbImage as ImageSourcePropType) - } + thumbImage={resolvedThumbImage} ref={forwardedRef} style={[ sliderStyle, diff --git a/package/src/components/StepsIndicator.tsx b/package/src/components/StepsIndicator.tsx index 0ac98316..693148e0 100644 --- a/package/src/components/StepsIndicator.tsx +++ b/package/src/components/StepsIndicator.tsx @@ -52,7 +52,7 @@ export const StepsIndicator = ({ }; }, [sliderWidth]); - const values = isLTR ? options.reverse() : options; + const values = isLTR ? options.slice().reverse() : options; const renderStepIndicator = useCallback( (i: number, index: number) => {