Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ntbosscher/react-api-helpers


https://github.com/ntbosscher/react-api-helpers

Last synced: 26 days ago
JSON representation

Awesome Lists containing this project

README

        

# Nate's React API Helpers

## Installation
```
npm install nate-react-api-helpers
// or
yarn add nate-react-api-helpers
```

## Usage

1. Setup your API endpoints
```ts
import {APIBase} from "nate-react-api-helpers/APIBase";

class API extends APIBase {
getCustomers(input: {limit?: number}) {
return this.fetcher.get("/api/customers", input);
}
}

interface Customer {
id: number;
}

export const api = new API();
```

2. Setup auth provider (optional if you use `{withoutAuth: true}` on `useAsync`)
```tsx
import {api} from "../api/API";
import {AuthProvider, useAsyncAction} from "nate-react-api-helpers/Auth"; import {useAuthenticated} from "./Auth";

function App() {
return (

)
}

function LoginModal() {
const auth = useAuthenticated();
const login = useAsyncAction(async (input) => {
if(await api.login(input)) {
auth.setAuthenticated(true);
}
// ...
}, []);

return (

{/* .. inputs .. */}
login.callback({username, password})}>

);
}
```

3. Use api endpoints
```tsx
import {useAsync} from "nate-react-api-helpers/AsyncUtils";
import {api} from "../api/API";
import React from "react";
import {Grid} from "@mui/material";

export function Customers() {
const customers = useAsync(() => api.getCustomers());

// will show as loading while we aren't authenticated
// after useAuthenticated().setAuthenticated(true), this will
// automatically re-fetch and resolve normally
if(customers.loadingOrError) {
return customers.LoadingOrErrorElement;
}

return (

{(customers.result || []).map(p =>
{p.name}
)}

)
}

export function PublicProducts() {
const products = useAsync(() => api.getProducts(), {withoutAuth: true});
if(products.loadingOrError) {
return products.LoadingOrErrorElement;
}

return (

{(products.result || []).map(p =>
{p.name}
)}

)
}
```

## FAQ

crypto.getRandomValues() not supported...
- Ensure you've imported `react-native-get-random-values` prior to importing any API-related
files from this package