npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@surglogs/with-connected-handler

v1.1.0

Published

HOC for easy event handler creation

Downloads

764

Readme

withConnectedHandler

Build Status

withConnectedHandler is a Higher Order Component that allows you to easily create a handler function you can use for submitting a form, reacting to input change or handling any kind of event. It has a similar API as withHandlers HOC from recompose. The added benefit of our HOC is that you can directly connect all the actions and state props from redux that you need in your handler.

Instalation

npm i @surglogs/with-connected-handler recompose react-redux

What is this library good for?

Todo list example

Let's say we have a todo list form. When the user clicks on save button, we want to update the todo list. We will call API endpoint that updates the todos and use it's response to update our redux state.

We will assume we already have TodoListForm component, updateTodos action and a working api.

We can create a basic form handler like this:

import withConnectedHandler from '@surglogs/with-connected-handler'

import { updateTodos } from '../actions'
import TodoListForm from './TodoListForm'
import api from '../api'

const TodoListFormWithHandler = withConnectedHandler({
  name: 'handleFormSubmit'
  actions: { updateTodos },
  handler: ({ updateTodos }) => async (newTodos) => {
    const response = await api.postTodos(newTodos)

    // dispatch updateTodos action
    updateTodos(response)
  }
})(TodoListForm)

// Alternatively, we can dispatch the action direcly using dispatch prop:

// const TodoListFormWithHandler = withConnectedHandler({
//   name: 'handleFormSubmit'
//   handler: ({ dispatch }) => async (newTodos) => {
//     const response = await api.postTodos(newTodos)

//     // dispatch updateTodos action
//     dispatch(updateTodos(response))
//   }
// })(TodoListForm)

export default FormWithHandler

Great! This is a good start. What if we need to use any props coming to TodoListFormWithHandler component or Redux state? It is pretty easy!

Let's say we need to send the category of our todo list to the API. The category prop is passed to TodoListFormWithHandler like this:

<TodoListFormWithHandler category="Books to read" />

We also want to update the color of our todo list. Let's assume that the new color of our todo list is stored in the Redux state as prop todoListColor.

Our code will look like this:

import withConnectedHandler from '@surglogs/with-connected-handler'

import { updateTodos } from '../actions'
import TodoListForm from './TodoListForm'
import api from '../api'

const TodoListFormWithHandler = withConnectedHandler({
  name: 'handleFormSubmit'
  actions: { updateTodos },
  args: {
    category: 'category', // picks a 'category' prop coming to TodoListFormWithHandler
    // category: (_, props) => props.category // this also works
    todoListColor: (state, props) => state.todoListColor // get todoListColor from redux state
  }
  handler: ({ updateTodos, category, todoListColor }) => async (newTodos) => {
    const response = await api.postTodos(newTodos, category, todoListColor)

    // dispatch updateTodos action
    updateTodos(response)
  }
})(TodoListForm)

export default FormWithHandler

When to use it?

withConnectedHandler HOC is best suited for handling form submits, input changes or any kinds of events. The only limitation is that you have to be using Redux state management tool in your app for withConnectedHandler to work.