@azmenak/react-beam

Beam react children to other parts of the React subtree

Usage no npm install needed!

<script type="module">
  import azmenakReactBeam from 'https://cdn.skypack.dev/@azmenak/react-beam';
</script>

README

React Beam

Allows children to other parts of the React subtree, and updates when needed. Originally designed for use with React Router in an app which has a common element such as a header with a title, where a component in the page subtree might want to change the title.

Install

npm i @azmenak/react-beam

Api

Receiver

import { Receiver } from 'react-beam';

Props

  • link:<String>: a unique ID, used to send children to the correct component
  • onUpdate:<Function (children)> (optional): runs whenever an update is received, with children as the only argument
  • children:<ReactNode> (optional): renders child node(s) when the recevied children are null or undefined
  • style:<Object> (optional): style will be shallowly mixed in when there is 1 child node, or is applied to a new <span> root node
  • className:<String> (optional): applied to child node when there is 1 child node, or applied to new <span> root node

Transmitter

Always renders null.

import { Transmitter } from 'react-beam';

Props

  • link:<String> a unique ID, used to send children to the correct component
  • children:<ReactNode> children to render in the <Receiver /> component

Usage

// AppHeader.jsx

import React from 'react';
import { Receiver } from 'react-beam';

export class AppHeader extends React.Component {
  render() {
    return (
      <div>
        { // ...other stuff }
        <Recevier link="header" />
      </div>
    );
  }
}
// SomePage.jsx

import React from 'react';
import { Transmitter } from 'react-beam';

export class SomePage extends React.Component {
  render() {
    return (
      <div>
        { // ...page stuff }
        <Transmitter link="header">
          <span>Page dependent content</span>
          <span>More content</span>
        </Transmitter>
      </div>
    );
  }
}