Swipe down to refresh or pull-to-refresh control for mobile web applications.
The component is built using composable utilities to give fine grain control over the swipe-refresh behavior. These building blocks could be used independently to build your own swipe-refresh control.
SwipeRefreshList—React component with swipe-refresh behavioruseSwipeRefresh—React hook that encapsulates the swipe-refresh logicSwipeRefreshCoordinator—UI framework agnostic implementation of the core gesture handling logic
To start using react-swipe-down-refresh, install it via NPM
npm i react-swipe-down-refresh
# yarn
yarn add react-swipe-down-refreshOpen in a mobile web-browser or toggle the device mode on a web-browser
Try the app online here.
Import the SwipeRefreshList component and include the styles provided in the package to get the swipe-refresh behavior.
Make sure your build system supports importing .css files.
import { SwipeRefreshList } from "react-swipe-down-refresh";
// include the styles
import "react-swipe-down-refresh/lib/styles.css";
export default function App() {
const onRefreshRequested = () => {
return new Promise<void>((resolve) => {
setTimeout(() => resolve(), 3000);
});
};
return (
<div>
<SwipeRefreshList onRefresh={onRefreshRequested}>
<div className="item">Line 1</div>
<div className="item">Line 2</div>
<div className="item">Line 3</div>
</SwipeRefreshList>
</div>
);
}| Name | Description | Required | Default |
|---|---|---|---|
| onRefresh | Callback function triggered on refresh | true | - |
| disabled | Disabled pull to refresh | false | false |
| className | CSS class to attache to the outermost div | false | - |
You can customize the swipe refresh spinner look and behavior via the following the props
| Name | Description | Required | Default |
|---|---|---|---|
| threshold | Minimum gesture movement displacement before swipe action is registered | false | 10 |
| onEndRefresh | Callback function triggered on refresh is complete | false | - |
| onStartRefresh | Callback function triggered on refresh start | false | - |
| slingshotDistance | The distance the refresh indicator can be pulled during a swipe gesture | false | 60 |
| progressViewOffset | The refresh indicator position during refresh | false | 30 |
| progressStrokeColor | Color of the refresh progress spinner | false | #2755c4 |
| getScrollTopOverride | Scroll top position of the scrolling element | false | document.scrollingElement.scrollTop |
| overrideBrowserRefresh | Override browser pull to refresh behavior | false | true |
| progressBackgroundColor | Background color of the progress spinner | false | #fff |