Skip to content

rize-network/react-request

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

100 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

React Request

npm version npm License: MIT styled with prettier

✨ Features

  • 🎣 React Hooks - Modern React hooks API for data fetching
  • πŸš€ TypeScript Support - Full TypeScript support with type safety
  • πŸ’Ύ Built-in Caching - Automatic request caching with configurable TTL
  • πŸ”„ Loading States - Automatic loading and progress tracking
  • ❌ Error Handling - Comprehensive error handling with retry logic
  • πŸ“ Form Integration - Seamless Formik integration for forms
  • 🌐 Network Awareness - Online/offline status handling
  • πŸ”§ Configurable - Highly customizable with global and per-request options
  • 🎯 Debouncing - Built-in request debouncing (300ms)
  • πŸ“Š Progress Tracking - Upload/download progress monitoring

πŸ“¦ Install

npm install @app-studio/react-request

πŸ”¨ Usage

Basic Example

import React from 'react';
import { useRequest, request } from '@app-studio/react-request';

// Define your API function
const fetchUser = (id) =>
  request({
    url: `https://api.example.com/users/${id}`,
    method: 'GET'
  });

// Use in component
function UserProfile({ userId }) {
  const { data, loading, error, run } = useRequest(fetchUser);

  React.useEffect(() => {
    run(userId);
  }, [userId]);

  if (loading) return <div>Loading...</div>;
  if (error) return <div>Error: {error.message}</div>;
  if (!data) return null;

  return (
    <div>
      <h1>{data.name}</h1>
      <p>{data.email}</p>
    </div>
  );
}

With Provider (Recommended)

import React from 'react';
import { RequestProvider } from '@app-studio/react-request';

function App() {
  return (
    <RequestProvider
      cached={true}
      debug={true}
      defaults={{
        onError: (error) => console.error('Request failed:', error),
        onSuccess: (data) => console.log('Request succeeded:', data)
      }}
    >
      <UserProfile userId="123" />
    </RequestProvider>
  );
}

Form Integration

import { Formik, Form, Field } from 'formik';

function CreateUserForm() {
  const { formikConfig, loading, error } = useRequest(
    (userData) => request({
      url: '/api/users',
      method: 'POST',
      params: userData
    }),
    {
      method: 'POST',
      onSuccess: (data) => alert('User created successfully!')
    }
  );

  return (
    <Formik initialValues={{ name: '', email: '' }} {...formikConfig}>
      <Form>
        <Field name="name" placeholder="Name" />
        <Field name="email" placeholder="Email" />
        <button type="submit" disabled={loading}>
          {loading ? 'Creating...' : 'Create User'}
        </button>
        {error && <div>Error: {error.message}</div>}
      </Form>
    </Formik>
  );
}

TypeScript

react-request is written in TypeScript with complete definitions.

πŸ“š Documentation

πŸ”— Links

🀝 Contributing PRs Welcome

We welcome all contributions! Here's how you can help:

  1. πŸ› Report bugs - Create an issue
  2. πŸ’‘ Suggest features - Start a discussion
  3. πŸ“ Improve docs - Help us make the documentation better
  4. πŸ”§ Submit PRs - Fix bugs or add new features

Development Setup

git clone https://github.com/rize-network/react-request.git
cd react-request
npm install
npm start

Running Tests

npm test

Please read our contributing guide for more details.

Let's fund issues in this repository

❀️ Sponsors and Backers

Author

SteedMonteiro, steed@rize.network

License

React Request is available under the MIT license. See the LICENSE file for more info.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

2 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors