Home

Awesome

react-use-redux

The wait is over, just use official react-redux package if you want hooks.

Alternative Redux bindings with React hooks.

Note: this is an experimental package. I do not recommend using this in production. You're probably better off using react-redux.

Discussion of using hooks in react-redux repo here

Installing

npm install react-use-redux

or

yarn add react-use-redux

Examples

Usage is very similar to what react-redux provides, except it uses hooks.

Firstly let's wrap our app with provider from react-use-redux:

import { StoreContext } from 'react-use-redux';

const store = configureStore(/* ... */)

const AppWithStore = () => (
  <StoreContext.Provider value={store}>
    <App />
  </StoreContext.Provider>
)

Now that we have that taken care of we can connect our functional components to Redux store:

import { createUseConnect } from 'react-use-redux'

const useConnect = createUseConnect((state) => ({ user: state.user }))

const Profile = () => {
  const { user } = useConnect()

  return (
    <div>
      <div>Name: {user.name}</div>
      <div>Surname: {user.surname}</div>
    </div>
  )
}

And that's it! Now we can use redux state in our components without hocs or render props.

API

StoreContext

React context which has two properties: Provider and Consumer. Value provided to <StoreContext.Provider /> should be an instance of Redux store. Use this as a top level wrapper of your app.

createUseConnect([mapStateToProps], [mapDispatchToProps], [mergeProps])

Hook creator which returns useConnect hook to be used inside a component. Behaviour is almost identical to connect from react-redux. useConnect returns an object of props.

mapStateToProps((state, ownProps) => object)

Called everytime when store is updated. Used to calculate props from current state.

mapDispatchToProps((dispatch, ownProps) => object)

Used to wrap dispatch over provided functions. If mapDispatchToProps is not provided, it will fallback to returning dispatch to props.

mergeProps((stateProps, dispatchProps, ownProps) => object)

Used to tweak how props should be merged, this is an advanced property. When this function is not provided left-to-right merge is applied:

(stateProps, dispatchProps, ownProps) => ({ ...stateProps, ...dispatchProps, ...ownProps })

License

MIT