@thrash-industries/react-actioncable-provider
Version:
ActionCable Provider for React
114 lines (80 loc) • 3.55 kB
Markdown
# ActionCable Provider for React
This package provides an ActionCable context provider and consumer to allow you to subscribe to ActionCable channels in your React components.
## Requirements
As this package uses React's new Context API, **React 16.3+ is required**.
Run `npx browserslist` to see `default, not ie 11` option in `.browserslistrc` [compatibility](https://browserl.ist/?q=defaults). There is no IE 11 support starting in version 4.0.0.
## Install
```shell
npm install --save @thrash-industries/react-actioncable-provider
# OR
yarn add @thrash-industries/react-actioncable-provider
```
## Usage
The public API exports two components that you'll use: `<ActionCableProvider />` and `<ActionCableConsumer />`.
### `<ActionCableProvider />`
The provider is used in an outer container and wraps all of the components that may or may not consume the context. It accepts one of two props: `url` and `cable`. Passing `url` will result in the provider instantiating its own `ActionCable.Consumer` with that URL. Passing `cable` allows you to manually instantiate an `ActionCable.Consumer` on your own and pass it to the provider to be used by all descendent consumers.
#### With `url`
```jsx
<ActionCableProvider url="ws://test.example.com/cable">...</ActionCableProvider>
```
#### With `cable`
```jsx
import ActionCable from "actioncable";
const cable = ActionCable.createConsumer("ws://test.example.com/cable");
<ActionCableProvider cable={cable}>...</ActionCableProvider>;
```
### `<ActionCableConsumer />`
The consumer will wrap an individual component. It accepts several props:
- `channel` [String] Name of the channel to which you want to subscribe.
- `channel` [Object] An object with a `channel` key which denotes the channel to which you want to subscribe. All other keys are passed to the channel as params.
- `onConnected` [Function] A handler function that is called when the channel connects.
- `onDisconnected` [Function] A handler function that is called when the channel disconnects.
- `onInitialized` [Function] A handler function that is called when the `ActionCable`.`Consumer` is initialized.
- `onRejected` [Function] A handler function that is called when the requested subscription is rejected.
- `onReceived` [Function] A handler function that is called when the channel transmits a message to the client.
```jsx
import React from "react";
import PropTypes from "prop-types";
import { ActionCableConsumer } from "@thrash-industries/react-actioncable-provider";
export default class Widget extends React.Component {
static propTypes = {
message: PropTypes.string
};
constructor(...props) {
super(...props);
this.handleReceived = this.handleReceived.bind(this);
this.state = {
message: ""
};
}
handleReceived(message) {
this.setState(state => {
return {
message
};
});
}
render() {
return (
<ActionCableConsumer
channel="WidgetChannel"
onReceived={this.handleReceived}
>
<h1>{this.state.message}</h1>
</ActionCableConsumer>
);
}
}
```
## Publishing
- `yarn` Install dependencies
- `yarn test` Run tests
- `yarn build` Build for production
- `npm version [patch|minor|major]` Increment version
- `npm publish` Publish to npm
## Other Uses
### React Native
See https://github.com/cpunion/react-native-actioncable
### Server Side Rendering
See https://github.com/cpunion/react-actioncable-provider/issues/8
Example: https://github.com/cpunion/react-actioncable-ssr-example