Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

react-peer

madou186MIT0.2.6TypeScript support: included

Send data to someone else's browser as easy as using setState()

peerjs, webrtc, web-rtc, peer-to-peer, p2p, react-hooks, react

readme

react-peer

Build Status npm npm bundle size (minified + gzip) Dev Dependencies Dev Dependencies Dev Dependencies

Using the power of WebRTC and peerjs you can send data to someone else's browser as easy as using setState() ⚛🍐

Installation

Uses peerjs under the hood. Requires at least react@^16.3.0 and react-dom@^16.3.0. Comes with TypeScript types out-of-the-box.

npm install react-peer react react-dom --save
yarn add react-peer react react-dom

Usage

usePeerState<TState>(initialState?: TState, opts?: { brokerId?: string }): [TState, Function, string, Peer.DataConnection[], PeerError | undefined];

⚠️ Make sure to use react@^16.8.0 and react-dom@^16.8.0 if wanting to use hooks. Unsure what hooks are? Check out their introduction! ⚠️

Behaves as your regular useState() hook, but will eventually send data to any connected peers. Peers can connect to you using the brokerId that is eventually returned.

opts.brokerId is optionally used when you already have a broker id generated.

import { usePeerState } from 'react-peer';

const App = () => {
  const [state, setState, brokerId, connections, error] = usePeerState();

  setState({ message: 'hello' });
};

useReceivePeerState<TState>(peerBrokerId: string, opts?: { brokerId?: string }): [TState | undefined, boolean, PeerError | undefined];

⚠️ Make sure to use react@^16.8.0 and react-dom@^16.8.0 if wanting to use hooks. Unsure what hooks are? Check out their introduction! ⚠️

Will receive peer state eventually from a peer identified using peerBrokerId.

opts.brokerId is optionally used when you already have a broker id generated.

import { useReceivePeerState } from 'react-peer';

const App = () => {
  const [state, isConnected, error] = useReceivePeerState('swjg3ls4bq000000');
};

<PeerStateProvider />

Useful if not yet using react hooks. When setting the value prop it will propagate it to all connected peers.

brokerId prop is optionally used when you already have a broker id generated.

import { PeerStateProvider } from 'react-peer';

<PeerStateProvider value={{ message: 'hello' }}>
  {({ brokerId, connections, error }) => <div />}
</PeerStateProvider>;

<ReceivePeerState />

Useful if not yet using react hooks. Will receive data from the peer broker.

brokerId prop is optionally used when you already have a broker id generated.

import { ReceivePeerState } from 'react-peer';

<ReceivePeerState peerBrokerId="swjg3ls4bq000000">
  {({ data, isConnected, error }) => <div />}
</ReceivePeerState>;

changelog

Change Log

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Unreleased

0.2.6 - 2019-02-10

Changed

  • Updated README
  • Set peer dep of react and react-dom to >=16.3.0

0.2.5 - 2019-02-10

Changed

  • Loosened react and react-dom peer dependency - now if you want to use the custom hooks make sure to have ^16.8.0, else anything from ^16.3.0 is fine for the component usage

0.2.4 - 2019-02-02

Added

  • Errors are now exposed in the components and hooks

0.2.3 - 2019-02-02

Changed

  • Use useEffect over useLayoutEffect for deferred performance reasons

0.2.2 - 2019-02-02

Fixed

  • usePeerState() now correctly sends the current state instead of initial state when a new peer connects

0.2.1 - 2019-01-29

Added

  • PeerStateProvider and ReceivePeerState components to be used when react hooks aren't available for the consumer

0.2.0 - 2019-01-28

Changed

  • BREAKING CHANGE: Renamed useRecievePeerState to useReceivePeerState, and all mentions of it across the codebase

0.1.3 - 2019-01-28

Added

  • sideEffects: true to packagejson to enable code splitting
  • Put peerjs behind a dynamic import to enable codesplitting in modern es-module environments

0.1.2 - 2019-01-28

Changed

  • Increased size limit by 0.01KB
  • Ignore dist folder from repo

0.1.1 - 2019-01-28

Fixed

  • usePeerState() not being able to store more than the latest peer connection

0.1.0 - 2019-01-28

  • initial release