从 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 的支持还不够强大。
在 Ionic Framework 中使用 Swiper.js 并不需要 使用 Swiper 的 React 组件。
开始入门
首先,更新到 最新版本的 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;