@@ -185,8 +185,8 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
185185 ariaValueTextFormatterForHandle,
186186 } = props ;
187187
188- const handlesRef = React . useRef < HandlesRef > ( null ) ;
189- const containerRef = React . useRef < HTMLDivElement > ( null ) ;
188+ const handlesRef = React . useRef < HandlesRef | null > ( null ) ;
189+ const containerRef = React . useRef < HTMLDivElement | null > ( null ) ;
190190
191191 const direction = React . useMemo < Direction > ( ( ) => {
192192 if ( vertical ) {
@@ -214,9 +214,11 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
214214
215215 // ============================ Marks =============================
216216 const markList = React . useMemo < InternalMarkObj [ ] > ( ( ) => {
217- return Object . keys ( marks || { } )
217+ const markRecord = marks || { } ;
218+
219+ return Object . keys ( markRecord )
218220 . map < InternalMarkObj > ( ( key ) => {
219- const mark = marks [ key ] ;
221+ const mark = markRecord [ key ] ;
220222 const markObj : InternalMarkObj = {
221223 value : Number ( key ) ,
222224 } ;
@@ -243,10 +245,10 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
243245 const [ formatValue , offsetValues ] = useOffset (
244246 mergedMin ,
245247 mergedMax ,
246- mergedStep ,
248+ mergedStep as number ,
247249 markList ,
248250 allowCross ,
249- mergedPush ,
251+ mergedPush as false | number ,
250252 ) ;
251253
252254 // ============================ Values ============================
@@ -269,7 +271,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
269271
270272 // When count provided or value is `undefined`, we fill values
271273 if ( count || mergedValue === undefined ) {
272- const pointCount = count >= 0 ? count + 1 : 2 ;
274+ const pointCount = count !== undefined && count >= 0 ? count + 1 : 2 ;
273275 returnValues = returnValues . slice ( 0 , pointCount ) ;
274276
275277 // Fill with count
@@ -287,6 +289,8 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
287289
288290 return returnValues ;
289291 } , [ mergedValue , rangeEnabled , mergedMin , count , formatValue ] ) ;
292+ const rawValuesRef = React . useRef ( rawValues ) ;
293+ rawValuesRef . current = rawValues ;
290294
291295 // =========================== onChange ===========================
292296 const getTriggerValue = ( triggerValues : number [ ] ) =>
@@ -308,7 +312,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
308312 const finishChange = useEvent ( ( draggingDelete ?: boolean ) => {
309313 // Trigger from `useDrag` will tell if it's a delete action
310314 if ( draggingDelete ) {
311- handlesRef . current . hideHelp ( ) ;
315+ handlesRef . current ! . hideHelp ( ) ;
312316 }
313317
314318 const finishValue = getTriggerValue ( rawValues ) ;
@@ -332,8 +336,8 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
332336 triggerChange ( cloneNextValues ) ;
333337
334338 const nextFocusIndex = Math . max ( 0 , index - 1 ) ;
335- handlesRef . current . hideHelp ( ) ;
336- handlesRef . current . focus ( nextFocusIndex ) ;
339+ handlesRef . current ! . hideHelp ( ) ;
340+ handlesRef . current ! . focus ( nextFocusIndex ) ;
337341 } ;
338342
339343 const [ draggingIndex , draggingValue , draggingDelete , cacheValues , onStartDrag ] = useDrag (
@@ -349,6 +353,8 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
349353 rangeEditable ,
350354 minCount ,
351355 ) ;
356+ const draggingValueRef = React . useRef ( draggingValue ) ;
357+ draggingValueRef . current = draggingValue ;
352358
353359 /**
354360 * When `rangeEditable` will insert a new value in the values array.
@@ -395,7 +401,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
395401
396402 if ( e ) {
397403 ( document . activeElement as HTMLElement ) ?. blur ?.( ) ;
398- handlesRef . current . focus ( focusIndex ) ;
404+ handlesRef . current ! . focus ( focusIndex ) ;
399405 onStartDrag ( e , focusIndex , cloneNextValues ) ;
400406 } else {
401407 // https://github.com/ant-design/ant-design/issues/49997
@@ -414,7 +420,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
414420 e . preventDefault ( ) ;
415421
416422 const { width, height, left, top, bottom, right } =
417- containerRef . current . getBoundingClientRect ( ) ;
423+ containerRef . current ! . getBoundingClientRect ( ) ;
418424 const { clientX, clientY } = e ;
419425
420426 let percent : number ;
@@ -440,7 +446,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
440446 } ;
441447
442448 // =========================== Keyboard ===========================
443- const [ keyboardValue , setKeyboardValue ] = React . useState < number > ( null ) ;
449+ const [ keyboardValue , setKeyboardValue ] = React . useState < number > ( Number . NaN ) ;
444450
445451 const onHandleOffsetChange = ( offset : number | 'min' | 'max' , valueIndex : number ) => {
446452 if ( ! disabled ) {
@@ -454,14 +460,14 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
454460 } ;
455461
456462 React . useEffect ( ( ) => {
457- if ( keyboardValue !== null ) {
458- const valueIndex = rawValues . indexOf ( keyboardValue ) ;
463+ if ( ! Number . isNaN ( keyboardValue ) ) {
464+ const valueIndex = rawValuesRef . current . indexOf ( keyboardValue ) ;
459465 if ( valueIndex >= 0 ) {
460- handlesRef . current . focus ( valueIndex ) ;
466+ handlesRef . current ! . focus ( valueIndex ) ;
461467 }
462468 }
463469
464- setKeyboardValue ( null ) ;
470+ setKeyboardValue ( Number . NaN ) ;
465471 } , [ keyboardValue ] ) ;
466472
467473 // ============================= Drag =============================
@@ -484,9 +490,9 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
484490 // Auto focus for updated handle
485491 const dragging = draggingIndex !== - 1 ;
486492 React . useEffect ( ( ) => {
487- if ( ! dragging ) {
488- const valueIndex = rawValues . lastIndexOf ( draggingValue ) ;
489- handlesRef . current . focus ( valueIndex ) ;
493+ if ( ! dragging && ! Number . isNaN ( draggingValueRef . current ) ) {
494+ const valueIndex = rawValuesRef . current . lastIndexOf ( draggingValueRef . current ) ;
495+ handlesRef . current ! . focus ( valueIndex ) ;
490496 }
491497 } , [ dragging ] ) ;
492498
@@ -509,7 +515,7 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
509515 // ============================= Refs =============================
510516 React . useImperativeHandle ( ref , ( ) => ( {
511517 focus : ( ) => {
512- handlesRef . current . focus ( 0 ) ;
518+ handlesRef . current ! . focus ( 0 ) ;
513519 } ,
514520 blur : ( ) => {
515521 const { activeElement } = document ;
@@ -520,9 +526,10 @@ const Slider = React.forwardRef<SliderRef, SliderProps<number | number[]>>((prop
520526 } ) ) ;
521527
522528 // ========================== Auto Focus ==========================
529+ const autoFocusRef = React . useRef ( autoFocus ) ;
523530 React . useEffect ( ( ) => {
524- if ( autoFocus ) {
525- handlesRef . current . focus ( 0 ) ;
531+ if ( autoFocusRef . current ) {
532+ handlesRef . current ! . focus ( 0 ) ;
526533 }
527534 } , [ ] ) ;
528535
0 commit comments