react-global-event-decorator

0.0.1 • Public • Published

react-global-event-decorator

An abuse of the decorator pattern

Install

If you are feeling risky, go ahead and use this. You're an adult.

npm install --save react-global-event-decorator

What is this for?

Ever had a React component that needed to do things when you clicked anywhere in the DOM?

It required you to write code like this:

componentDidMount() {
  window.addEventListener('click', myGlobalClickHandler.bind(this));
}

That's fine, but then you have to remember to remove the listener when you unmount also. This is a simple thing to miss which leads to memory leaks and bad practice.

Enter the abuse

I decided to mess with the system, and abuse a new spec, Decorators. Now we can refactor the above code into this:

import reactGlobalEvent from 'react-global-event-decorator';

@reactGlobalEvent('click')
myGlobalClickHandler() {
  // impl
}

This will handle the binding and unbinding with your components lifecycle. How's this work? Well, we destroyed your ability to define componentDidMount and componentWillUnmount.

Uhhh

Yeah. It's a dumb idea. But it's an idea. Which is all this was. But you can just do that dumb coding thing we do in javascript where we put a _ before everything and it'll work fine.

@reactGlobalEvent('click')
myGlobalClickHandler() {
  // impl
}

_componentDidMount() {
  // mount logic
}

Roadmap

Probably nothing. As this is likely a bad idea. If anything,

  • make sure all events are covered
  • Tie directly into Reacts event system, rather than window.{add|remove}EventListener

Readme

Keywords

none

Package Sidebar

Install

npm i react-global-event-decorator

Weekly Downloads

1

Version

0.0.1

License

ISC

Last publish

Collaborators

  • blainekasten