@nvd/use-redux

React hook utility functions to access state and dispatch actions from a redux store.

Usage no npm install needed!

<script type="module">
  import nvdUseRedux from 'https://cdn.skypack.dev/@nvd/use-redux';
</script>

README

useRedux

React hook utilities to access your state and dispatch actions from a redux store.

build status npm version

Installation

# Yarn
yarn add @nvd/use-redux

# NPM
npm i --save @nvd/use-redux

Usage

This utility depends on React Hooks which are available as of react version 16.8.0 and higher.

import React from "react"
import { render } from "react-dom"
import { createStore } from "redux"
import { Provider, useDispatch } from "@nvd/use-redux"

const store = createStore(reducer)

// Use hook utilities to access current state and dispatch actions
const App = () => {
    const dispatch = useDispatch()
    const { counter } = useRedux()

    const increment = () => dispatch({ type: "INCREMENT", payload: counter++ })

    return (
        <button>Click {counter}</button>
    )
}

// Wrap you app in a provider function and pass a redux store as value
render(
    <Provider value={store}>
        <App />
    </Provider>,
    document.getElementById('root'),
)

API

Provider

React component used to pass a store to any hook utility used in child components. This component is required in order for any of the hook utilities to work.

const store = createStore({})

ReactDOM.render(
    <Provider value={store}>
        <ChildComponents />
    </Provider>
)

useSelector

<T, P>(selector: (state: T) => P) => P

Takes a selector function used to select and return a subset of the current redux state. The selector function will get invoked immediately after creation and after each store update.

const TodoList = () => {
    const todos = useSelector(state => state.todos.filter(todo => !todo.completed))

    return (
        <div>
            { todos.map(t => <Todo item={t} />) }
        </div>
    )
}

useActionCreators

<A extends Action, M extends ActionCreatorsMapObject<A>>(actionCreators: M) => M

Automatically bind a given map of action creators to the current stores dispatch function

const App = () => {
    const { incrementCounter } = useActionCreators(action)
    return <button onClick={incrementCounter}>Click</button>
}

useRedux

() => State

Returns the whole state tree from the current store

const Count = () => {
    const state = useRedux()
    return <div> Current count: { state.counter } </div>
}

useDispatch

() => Dispatch<AnyAction>

Returns dispatch function from the current store.

const App = () => {
    const dispatch = useDispatch()
    return <button onClick={() => dispatch({ type: "INCREMENT" }))}>Click</button>
}

License

MIT