Ionic React Swiper 未在 slidesPerView 属性 中显示幻灯片数量
Ionic React Swiper not showing number of slides in slidesPerView property
我是第一次将 Ionic 与 React 结合使用。使用滑动器时,每个视图的幻灯片数量 属性 未得到遵守,仅显示 1 张幻灯片。我做错了什么?
我正在使用以下导入:
`从 'swiper/react' 导入 { Swiper, SwiperSlide };
导入'swiper/swiper-bundle.css'`
<IonGrid>
<IonRow>
<IonCol size="3">
<IonSelect
onIonChange={((e) => {
setForm({album: form.album, month: form.month, year: e.detail.value});
})}
value={String(form.year)}>
{[...Array(10)].map((num, i) =>
<IonSelectOption
key={`year_${form.year - i}`}>
{form.year - i}
</IonSelectOption>
)}
</IonSelect>
</IonCol>
<IonCol size="9">
<Swiper
slidesPerView={6}
onSwiper={(swiper) => console.log(swiper)}
onTap={(context) => onMonthTap(context)}
initialSlide={ form.month }>
{["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"].map((mon, idx) => {
return (
<>
<SwiperSlide key={`month_${idx}`}>
<IonLabel>{form.month === idx ? <b>{mon}</b> : mon}</IonLabel>
</SwiperSlide>
</>
)
})}
</Swiper>
</IonCol>
</IonRow>
</IonGrid>
您可以将 slideOpts 作为参数传递给 swiper
// Optional parameters to pass to the swiper instance.
// See http://idangero.us/swiper/api/ for valid options.
const slideOpts = {
initialSlide: 1,
speed: 400
};
export const SlidesExample: React.FC = () => (
<IonContent>
<IonSlides pager={true} options={slideOpts}>
<IonSlide>
<h1>Slide 1</h1>
</IonSlide>
<IonSlide>
<h1>Slide 2</h1>
</IonSlide>
<IonSlide>
<h1>Slide 3</h1>
</IonSlide>
</IonSlides>
</IonContent>
);
进行刷卡器更新有帮助,但只是在引入一些延迟之后。我不确定这是否是正确答案,但暂时对我有用。
<Swiper
slidesPerView={6}
spaceBetween={10}
onSwiper={(swiper) => setSwiperInstance(swiper)}
onTap={(context) => onMonthTap(context)}
initialSlide={ month }
>
useEffect(() => {
const timeout = setTimeout(() => {
swiperInstance && swiperInstance.update();
}, 50);
}, [swiperInstance]);
使用 useLayoutEffect
而不是 useEffect
将在第一次绘制之前更新滑动器并且应该可以解决您的问题
useLayoutEffect(() => {
swiperInstance && swiperInstance.update();
}, [swiperInstance]);
useLayoutEffect 内安排的更新将在浏览器有机会绘制之前同步刷新。
我是第一次将 Ionic 与 React 结合使用。使用滑动器时,每个视图的幻灯片数量 属性 未得到遵守,仅显示 1 张幻灯片。我做错了什么?
我正在使用以下导入:
`从 'swiper/react' 导入 { Swiper, SwiperSlide };
导入'swiper/swiper-bundle.css'`
<IonGrid>
<IonRow>
<IonCol size="3">
<IonSelect
onIonChange={((e) => {
setForm({album: form.album, month: form.month, year: e.detail.value});
})}
value={String(form.year)}>
{[...Array(10)].map((num, i) =>
<IonSelectOption
key={`year_${form.year - i}`}>
{form.year - i}
</IonSelectOption>
)}
</IonSelect>
</IonCol>
<IonCol size="9">
<Swiper
slidesPerView={6}
onSwiper={(swiper) => console.log(swiper)}
onTap={(context) => onMonthTap(context)}
initialSlide={ form.month }>
{["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"].map((mon, idx) => {
return (
<>
<SwiperSlide key={`month_${idx}`}>
<IonLabel>{form.month === idx ? <b>{mon}</b> : mon}</IonLabel>
</SwiperSlide>
</>
)
})}
</Swiper>
</IonCol>
</IonRow>
</IonGrid>
您可以将 slideOpts 作为参数传递给 swiper
// Optional parameters to pass to the swiper instance.
// See http://idangero.us/swiper/api/ for valid options.
const slideOpts = {
initialSlide: 1,
speed: 400
};
export const SlidesExample: React.FC = () => (
<IonContent>
<IonSlides pager={true} options={slideOpts}>
<IonSlide>
<h1>Slide 1</h1>
</IonSlide>
<IonSlide>
<h1>Slide 2</h1>
</IonSlide>
<IonSlide>
<h1>Slide 3</h1>
</IonSlide>
</IonSlides>
</IonContent>
);
进行刷卡器更新有帮助,但只是在引入一些延迟之后。我不确定这是否是正确答案,但暂时对我有用。
<Swiper
slidesPerView={6}
spaceBetween={10}
onSwiper={(swiper) => setSwiperInstance(swiper)}
onTap={(context) => onMonthTap(context)}
initialSlide={ month }
>
useEffect(() => {
const timeout = setTimeout(() => {
swiperInstance && swiperInstance.update();
}, 50);
}, [swiperInstance]);
使用 useLayoutEffect
而不是 useEffect
将在第一次绘制之前更新滑动器并且应该可以解决您的问题
useLayoutEffect(() => {
swiperInstance && swiperInstance.update();
}, [swiperInstance]);
useLayoutEffect 内安排的更新将在浏览器有机会绘制之前同步刷新。