react-slick 和 react-swipe 都是 React 生态中用于实现触摸滑动轮播效果的组件库。react-slick 基于经典的 Slick Carousel,提供丰富的配置项如响应式断点、无限循环和多种动画效果,适合复杂场景。react-swipe 则是对 swipe.js 的轻量封装,专注于基础的手势识别与滑动切换,结构更简单但功能有限。
在 React 项目中实现内容滑动展示时,react-slick 和 react-swipe 是两个历史悠久的选择。它们都能处理触摸手势和轮播逻辑,但底层实现和维护状态差异巨大。本文将从架构、API 设计和工程风险角度进行深度对比。
react-slick 依赖较多,底层基于 jQuery 时代的 slick-carousel 逻辑移植。
enquire.js 等较旧的库,可能与现代构建工具产生冲突。// react-slick 安装
npm install react-slick slick-carousel
// 引入样式
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
react-swipe 依赖极少,仅封装了 swipe-js-iso。
// react-swipe 安装
npm install react-swipe
// 无需引入额外 CSS,但需自定义容器样式
import ReactSwipe from 'react-swipe';
react-slick 使用 <Slider> 组件包裹子元素。
// react-slick 基础用法
import Slider from "react-slick";
function SimpleSlider() {
return (
<Slider>
<div><h3>Slide 1</h3></div>
<div><h3>Slide 2</h3></div>
<div><h3>Slide 3</h3></div>
</Slider>
);
}
react-swipe 使用 <ReactSwipe> 组件,内部结构更严格。
// react-swipe 基础用法
import ReactSwipe from 'react-swipe';
function SimpleSwipe() {
return (
<ReactSwipe>
<div><h3>Slide 1</h3></div>
<div><h3>Slide 2</h3></div>
<div><h3>Slide 3</h3></div>
</ReactSwipe>
);
}
react-slick 提供数十个配置项,覆盖绝大多数场景。
// react-slick 高级配置
const settings = {
dots: true,
infinite: true,
speed: 500,
slidesToShow: 3,
slidesToScroll: 1,
responsive: [
{ breakpoint: 768, settings: { slidesToShow: 2 } }
]
};
<Slider {...settings}>...</Slider>
react-swipe 配置项非常有限,主要通过 swipeOptions 传递。
continuous, auto, startSlide。// react-swipe 配置选项
const swipeOptions = {
continuous: true,
auto: 3000,
startSlide: 0,
speed: 300
};
<ReactSwipe swipeOptions={swipeOptions}>...</ReactSwipe>
react-slick 提供详细的生命周期事件。
beforeChange, afterChange 用于同步状态。ref 调用 slickGoTo, slickPlay 等方法。// react-slick 事件与方法
const sliderRef = useRef(null);
const settings = {
beforeChange: (current, next) => console.log(`From ${current} to ${next}`),
afterChange: (current) => console.log(`Arrived at ${current}`)
};
<Slider ref={sliderRef} {...settings}>...
<button onClick={() => sliderRef.current.slickGoTo(2)}>Go to 3</button>
react-swipe 事件回调较少,主要通过 swipeOptions 定义。
onSwipe, onStart, onMove, onEnd。// react-swipe 事件回调
const swipeOptions = {
onSwipe: (el, delta) => console.log(`Swiped ${delta}`),
onEnd: (el, delta) => console.log(`Swipe ended ${delta}`)
};
<ReactSwipe swipeOptions={swipeOptions}>...</ReactSwipe>
react-slick 处于维护模式,更新缓慢但稳定。
react-swipe 已停止维护,GitHub 仓库已归档。
| 特性 | react-slick | react-swipe |
|---|---|---|
| 维护状态 | 🟡 缓慢更新 | 🔴 已归档/停止维护 |
| 功能丰富度 | 🟢 高(内置 dots/arrows) | 🔴 低(需手动实现) |
| 响应式支持 | 🟢 内置断点配置 | 🔴 需自行监听窗口 |
| 依赖体积 | 🟡 较重(含 CSS/JS) | 🟢 轻量 |
| API 控制 | 🟢 支持 Ref 方法调用 | 🟡 仅支持回调 |
| 适用场景 | 内容展示、营销页 | 遗留系统维护 |
react-slick 像是一个功能齐全的老式工具箱 🧰 — 虽然有些笨重,但工具齐全,能应对各种复杂需求。适合需要快速落地且功能要求多的传统后台或展示页。
react-swipe 像是一个废弃的零件 🔩 — 虽然轻巧,但已不再生产,缺乏支持。除非你正在维护一个五年前构建的系统,否则不应在新架构中引入。
最终建议:如果是全新项目,建议评估更现代的替代方案(如 swiper 或 embla-carousel-react),它们提供了更好的性能、Hooks 支持和活跃的维护。若必须在这两者中选择,react-slick 是唯一可行的生产环境选项 — 但请做好处理其遗留依赖的准备。
如果你的项目需要完整的轮播功能(如指示点、箭头、响应式断点)且无法引入更现代的库,选择 react-slick。它在社区中积累了解决大量边界情况的经验,适合内容展示型页面。但需注意其依赖较旧,可能影响打包体积。
仅建议在维护遗留系统时使用,新项目应避免选用。该库已停止维护,GitHub 仓库已归档,缺乏对现代 React 特性(如 Hooks)的支持。若只需极简滑动且愿自行维护代码,可考虑,但风险较高。
npm
npm install react-slick --save
yarn
yarn add react-slick
Also install slick-carousel for css and font
npm install slick-carousel
// Import css files
import "slick-carousel/slick/slick.css";
import "slick-carousel/slick/slick-theme.css";
or add cdn link in your html
<link
rel="stylesheet"
type="text/css"
charset="UTF-8"
href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css"
/>
<link
rel="stylesheet"
type="text/css"
href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick-theme.min.css"
/>
import React from "react";
import Slider from "react-slick";
export default function SimpleSlider() {
var settings = {
dots: true,
infinite: true,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1
};
return (
<Slider {...settings}>
<div>
<h3>1</h3>
</div>
<div>
<h3>2</h3>
</div>
<div>
<h3>3</h3>
</div>
<div>
<h3>4</h3>
</div>
<div>
<h3>5</h3>
</div>
<div>
<h3>6</h3>
</div>
</Slider>
);
}
For all available props, go here.
For all available methods, go here
Want to run demos locally
git clone https://github.com/akiran/react-slick
cd react-slick
npm install
npm start
open http://localhost:8080
Join our discord channel to discuss react-slick bugs and ask for help
Please see the contributing guidelines