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
npm install react-use-redux
or
yarn add react-use-redux
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.
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.
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.
Called everytime when store is updated. Used to calculate props from current state.
Used to wrap dispatch over provided functions. If mapDispatchToProps is not provided, it will fallback to returning dispatch to props.
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 })MIT