Hari ini saya menemukan cara memperbaiki bug aneh di React Slick ketika infinite diset ke false dan initialSlide > 1.
Di proyek saya, slider yang tidak “infinite” dan dimulai dari slide ke-2 atau ke-3 ternyata tampil tidak sesuai. Slide yang muncul salah, dan posisinya seperti tidak sinkron.
Setelah mencari tahu, saya menemukan issue di GitHub yang menjelaskan bug ini. Solusinya sederhana tapi efektif: panggil slickGoTo() secara manual sekali saat komponen pertama kali di-render.
Berikut versi TypeScript-nya yang saya pakai:
import * as React from 'react';
import {default as SlickSlider} from 'react-slick';
interface Props extends React.ComponentProps<typeof SlickSlider> {
ref?: React.MutableRefObject<SlickSlider | null>;
}
const Slider = (props: Props) => {
const {initialSlide} = props;
const fallbackSliderRef = React.useRef<SlickSlider | null>(null);
const sliderRef = props.ref || fallbackSliderRef;
const hasSetPosition = React.useRef<boolean>(false);
/**
* workaround for issue changing slide works incorrect when infinite is false and initialSlide > 1
* https://github.com/akiran/react-slick/issues/1946#issuecomment-768935762
*/
React.useEffect(() => {
if (
sliderRef.current &&
!hasSetPosition.current &&
typeof initialSlide === 'number'
) {
sliderRef.current.slickGoTo(initialSlide);
hasSetPosition.current = true;
}
// run on first render only
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return <SlickSlider {...props} ref={sliderRef} />;
};
export default React.memo(Slider);Masalah kecil, tapi solusinya terasa memuaskan.
Kadang yang paling penting saat menghadapi bug di library pihak ketiga adalah tahu “di mana harus menyentuhnya”.

#TIL - Workaround Bug `React Slick` + `TypeScript` pada Perubahan Slide
TIL cara memperbaiki bug React Slick saat infinite = false dan initialSlide > 1, dengan memanggil slickGoTo() setelah komponen di-mount.