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

https://github.com/zero-dependency/react

⚛️ React hooks, utilities
https://github.com/zero-dependency/react

Last synced: 7 months ago
JSON representation

⚛️ React hooks, utilities

Awesome Lists containing this project

README

          

# @zero-dependency/react

[![npm version](https://img.shields.io/npm/v/@zero-dependency/react)](https://npm.im/@zero-dependency/react)
[![npm bundle size (scoped)](https://img.shields.io/bundlephobia/minzip/@zero-dependency/react)](https://bundlephobia.com/package/@zero-dependency/react@latest)
![npm license](https://img.shields.io/npm/l/@zero-dependency/react)

## Installation

```sh
npm install @zero-dependency/react
```

```sh
yarn add @zero-dependency/react
```

```sh
pnpm add @zero-dependency/react
```

## Usage

```tsx
import {
namedLazy,
useLocalStorage,
useSessionStorage,
useCookie,
ProviderTree,
createProvider
} from '@zero-dependency/react'

// React.lazy
const LazyComponent = namedLazy(() => import('./LazyComponent'), 'LazyComponent')

// localStorage/sessionStorage
interface User {
name: string
}

function App() {
const [users, { setUsers, resetUsers }] = useLocalStorage('users', [])

function addUser(user: User) {
setUsers((prevState) => [...prevState, user])
}

return (


addUser({ name: 'John Doe' })}>Add
resetUsers()}>Reset

)
}

// cookie
interface Cookie {
theme: 'dark' | 'light'
}

function App() {
const [cookies, { setCookie, removeCookie }] = useCookie({
initialValue: {
theme: 'dark'
},
attributes: {
maxAge: 60 * 60 * 24 * 7 // 1 week
}
})

return (


{cookies.theme}


setCookie('theme', 'dark')}>Dark
setCookie('theme', 'light')}>Light
removeCookie('theme')}>Remove

)
}

// ProviderTree edge case
import { StrictMode } from 'react'
import { SWRConfig } from 'swr'
import { createRoot } from 'react-dom/client'
import App from './App'
import Layout from './Layout'
import Router from './Router'

const root = document.querySelector('#root')!

// this is a helper function to create a tree of components
createRoot(root).render(
[
wrapper(StrictMode),
wrapper(SWRConfig, {
value: {
refreshInterval: 3000,
fetcher: (resource, init) =>
fetch(resource, init).then((res) => res.json())
}
}),
wrapper(Router),
wrapper(Layout)
]}
>


)

// instead of
createRoot(root).render(


fetch(resource, init).then(res => res.json())
}}
>







)

// createProvider
interface Counter {
count: number
setCount: React.Dispatch>
}

const [useCounter, CounterProvider] = createProvider('Counter')

function Counter() {
const { count, setCount } = useCounter()

return (


{count}


setCount(count + 1)}>
Increment


)
}

function App() {
const [count, setCount] = useState(0)

return (



)
}
```