Enhance a React component with a Higher Order Component that provides click outside detection.
Note: React 0.14 required for version >= 2.x. This assumes react and
react-dom is installed in your project. Continue using version 1.x for React
0.13 support.
Installation:
npm install react-click-outside
Some component that you wish to enhance with click outside detection:
const enhanceWithClickOutside = require('react-click-outside');
const React = require('react');
const Dropdown = React.createClass({
getInitialState() {
return {
isOpened: false,
};
},
handleClickOutside() {
this.setState({ isOpened: false });
},
render() {
...
},
});
module.exports = enhanceWithClickOutside(Dropdown);Note: There will be no error thrown if handleClickOutside is not
implemented.
The enhanceWithClickOutside function wraps the provided component in another
component that registers a click handler on document for the event capturing
phase. Using the event capturing phase prevents elements with a click handler
that calls stopPropagation from cancelling the click event that would
eventually trigger the component's handleClickOutside function.
There are some mixins that provide click outside detection functionality, but
they prevent the component from implementing the componentDidMount and
componentWillUnmount life cycle hooks. I recommend not using a mixin for this
case.
- IE9+ due to the usage of the event capturing phase.