SyncTasksManager is a native JSI-based library for React Native that allows you to manage and execute native-threaded sync tasks (such as periodic API polling) efficiently from JavaScript, while delegating the actual execution to the native layer for better performance.
β οΈ Note: This is not a background task manager β tasks do not continue running when the app is in the background or killed. The polling happens while the app is active, on a native thread, outside the JS thread.
- π Periodic HTTP polling with configurable interval
- π‘ Callback on data reception or error
- π§΅ High-performance execution via native thread using JSI
- π§ Centralized task management (start/stop all tasks)
- β Seamless integration with native modules (C++/JSI)
- β¨ Built-in response deduplication using response body hash β avoids redundant
onData
calls if the response has not changed
npm install react-native-sync-tasks
Donβt forget to run
pod install
for iOS if using CocoaPods.
import { createTask, SyncTasksManager } from 'react-native-sync-tasks';
type TData = {
userId: number;
id: number;
title: string;
body: string;
};
const task = createTask<TData>({
config: {
url: 'https://jsonplaceholder.typicode.com/posts/1',
// 2000ms / default 1000ms
interval: 2000,
// headers optional
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
},
// { body: TData, status_code: number }
onData: (data) => {
console.log('DATA', data);
},
// { error: string, status_code: number }
onError: (error) => {
console.log('ERROR', error);
},
});
SyncTasksManager.addTask(task);
SyncTasksManager.startAll();
...
// stop all tasks
SyncTasksManager.stopAll();
// or stop only 1 task
task.stop();
Creates a task that will periodically fetch data from the specified URL, executed on a native thread.
Name | Type | Description |
---|---|---|
config |
{ url: string; interval: number; headers?: Record<string, string> } |
HTTP polling configuration |
onData |
(data: { body: T, status_code: number }) => void |
Callback when data is successfully received |
onError |
(error: { error: string, status_code: number }) => void |
Callback when request fails (optional) |
Under the hood, the task stores a hash of the last response body. If the newly fetched response is identical (hash matches), the
onData
callback will not be triggered.
Represents an individual polling task running on a native thread.
start(): void
β Manually start the taskstop(): void
β Stop the taskisRunning(): boolean
β Check if the task is currently running
A global manager to control multiple polling tasks.
addTask(task: Task): void
β Add a single taskaddTasks(tasks: Task[]): void
β Add multiple tasksstartAll(): void
β Start all registered tasksstopAll(): void
β Stop all running tasks
MIT
π Enjoy using react-native-sync-tasks! Offload polling to native threads and keep your JS thread free.