/react-container-events

Trigger custom events in a React app from outside the app.

Primary LanguageJavaScript

React Container Events

Trigger custom events in a React app from outside the app.

Usage

First, render your app with the Container Events context provider:

// index.js
import React from 'react';
import { render } from 'react-dom';
import { ContainerEventsProvider } from './path/to/react-container-events';
import App from './App';

const root = document.getElementById('react-app-root-id');

render(
  <ContainerEventsProvider container={root}>
    <App />
  </ContainerEventsProvider>,
  root,
);

Next, register an event listener with the container event hook:

// MyComponent.js
import { useContainerEvent } from './path/to/react-container-events';

function MyComponent() {
  useContainerEvent('myCustomEvent', function() {
    // do side effects here...
  });
  return <div>Component stuff</div>;
}

Finally, outside of the React DOM, simply dispatch this custom event from a DOM event:

const button = document.getElementById('custom-event-trigger');
const reactContainer = document.getElementById('react-app-root-id');
button.addEventListener('click', function() {
  // Note: CustomEvent constructor requires a polyfill for IE
  reactContainer.dispatchEvent(new CustomEvent('myCustomEvent'));
});

You can pass data into the event by adding detail to the init object of CustomEvent.