从 IonSlides 迁移到 Swiper.js
IonSlides 吗?IonSlides 已在 v6.0.0 中弃用,并在 v7.0.0 中移除。我们推荐直接使用 Swiper.js 库。迁移过程如下所述。
如果您需要现代的触摸滑动组件,我们推荐使用 Swiper.js。本指南将介绍如何在 Ionic Framework 应用中设置适用于 React 的 Swiper。它还将涵盖从 IonSlides 迁移到官方 Swiper React 集成所需的任何迁移信息。
Swiper 的 React 组件将在未来版本的 Swiper 中被移除,替代方案是 Swiper Element。不过,本指南介绍如何迁移到 React 组件,因为它在撰写时提供了最稳定的体验。值得注意的是,React 目前对 Web Components 的支持还不够完善。
使用 Swiper 的 React 组件不是在 Ionic Framework 中使用 Swiper.js 所必需的。
开始入门
首先,更新到最新版本的 Ionic:
npm install @ionic/react@latest @ionic/react-router@latest
完成后,在项目中安装 Swiper 依赖:
npm install swiper@latest
使用 Create React App 的开发者必须使用 react-scripts v5.0.0+ 搭配最新版本的 Swiper。
样式滑动
接下来,我们需要导入基础的 Swiper 样式。我们还将导入 Ionic 提供的样式,这些样式允许我们使用与 IonSlides 相同的 CSS 变量来自定义 Swiper 样式。
我们建议在使用 Swiper 的组件中导入样式。这样可以确保样式仅在需要时加载:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
...
);
};
export default Home;
在 Ionic 中使用 Swiper.js 不是必须导入 @ionic/react/css/ionic-swiper.css。此文件用于与 IonSlides 组件向后兼容,如果您不想使用样式表中提供的 CSS 变量,可以放心地省略它。
更新选择器
以前,我们可以针对 ion-slides 和 ion-slide 来应用任何自定义样式。这些样式块的内容保持不变,但我们需要更新选择器。以下是从 ion-slides 迁移到 Swiper React 时的选择器变化列表:
| ion-slides 选择器 | Swiper 选择器 |
|---|---|
ion-slides | .swiper |
ion-slide | .swiper-slide |
预处理器(可选)
对于使用 SCSS 或 Less 样式的开发者,Swiper 也提供了这些文件的导入。
对于 Less 样式,将 Swiper 导入路径中的 css 替换为 less:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/less';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
...
);
};
export default Home;
对于 SCSS 样式,将 Swiper 导入路径中的 css 替换为 scss:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/scss';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
...
);
};
export default Home;
使用组件
Swiper 导出两个组件:Swiper 和 SwiperSlide。Swiper 组件相当于 IonSlides,SwiperSlide 相当于 IonSlide。
这些组件从 swiper/react 导入:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper>
<SwiperSlide>幻灯片 1</SwiperSlide>
<SwiperSlide>幻灯片 2</SwiperSlide>
<SwiperSlide>幻灯片 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
使用模块
默认情况下,适用于 React 的 Swiper 不会导入任何额外模块。要使用导航或分页等模块,您需要先导入它们。
IonSlides 自动包含了分页(Pagination)、滚动条(Scrollbar)、自动播放(Autoplay)、键盘(Keyboard)和缩放(Zoom)模块。本部分指南将向您展示如何安装这些模块。
首先,我们需要从 swiper 包中导入模块及其对应的 CSS 文件:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper>
<SwiperSlide>幻灯片 1</SwiperSlide>
<SwiperSlide>幻灯片 2</SwiperSlide>
<SwiperSlide>幻灯片 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
接下来,我们需要通过在 Swiper 组件上使用 modules 属性将这些模块提供给 Swiper:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper modules={[Autoplay, Keyboard, Pagination, Scrollbar, Zoom]}>
<SwiperSlide>幻灯片 1</SwiperSlide>
<SwiperSlide>幻灯片 2</SwiperSlide>
<SwiperSlide>幻灯片 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
最后,我们可以通过使用相应的属性来启用这些功能:
import React from 'react';
import { IonContent, IonPage } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper
modules={[Autoplay, Keyboard, Pagination, Scrollbar, Zoom]}
autoplay={true}
keyboard={true}
pagination={true}
scrollbar={true}
zoom={true}
>
<SwiperSlide>幻灯片 1</SwiperSlide>
<SwiperSlide>幻灯片 2</SwiperSlide>
<SwiperSlide>幻灯片 3</SwiperSlide>
</Swiper>
</IonContent>
</IonPage>
);
};
export default Home;
请参阅 https://swiperjs.com/react#usage 获取完整的模块列表。
IonicSlides 模块
使用 IonSlides 时,Ionic 会自动自定义数十个 Swiper 属性。这带来了在移动设备上滑动时感觉流畅的体验。我们建议使用 IonicSlides 模块来确保直接使用 Swiper 时也设置了这些属性。但是,在 Ionic 中使用 Swiper.js 不是必须使用此模块。
建议查看 IonicSlides 设置的属性,并确定您想自定义哪些属性。
我们可以通过从 @ionic/react 导入 IonicSlides 模块并将其作为 modules 数组的最后一项来安装它:
import React from 'react';
import { IonContent, IonPage, IonicSlides } from '@ionic/react';
import { Swiper, SwiperSlide } from 'swiper/react';
import { Autoplay, Keyboard, Pagination, Scrollbar, Zoom } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/autoplay';
import 'swiper/css/keyboard';
import 'swiper/css/pagination';
import 'swiper/css/scrollbar';
import 'swiper/css/zoom';
import '@ionic/react/css/ionic-swiper.css';
const Home: React.FC = () => {
return (
<IonPage>
<IonContent>
<Swiper
modules={[Autoplay, Keyboard, Pagination, Scrollbar, Zoom, IonicSlides]}
autoplay={true}
keyboard={true}
pagination={true}
scrollbar={true}
zoom={true}
>
<SwiperSlide>幻灯片 1</SwiperSlide>
<SwiperSlide>