A React hook for creating ActionCable subscriptions in components
yarn add use-action-cable
import React from 'react';
import { ActionCableProvider } from 'use-action-cable';
const App = (props) => (
<ActionCableProvider url="/cable">
<SomeComponent />
</ActionCableProvider>
)
import React from 'react';
import { useActionCable } from 'use-action-cable';
const SomeOtherComponent = ({ id }) => {
const channelParams = { channel: 'SomeChannel', id };
const channelHandlers = {
received(data) {
console.log(JSON.parse(data);
}
}
useActionCable(channelParams, channelHandlers);
return <p>When this mounts, there will be an active subscription. If id changes, the subscription will be unsubscribed and re-subscribed with the new id. The subscription will be remove when unmounted.</p>;
}
export default SomeOtherComponent;
- This helps with components that need to fetch data first. For example:
import React, { useEffect, useState } from 'react';
import { useActionCable } from 'use-action-cable';
...
const SomeOtherComponent = () => {
const [currentOrg, setCurrentOrg] = useState();
useEffect(async () => {
const resp = await getCurrentOrg();
setCurrentOrg(resp);
}, []);
let channelParams;
if (currentOrg) {
channelParams = { channel: 'OrgChannel', room: currentOrg.id };
}
const channelHandlers = {
received(data) {
console.log(JSON.parse(data);
}
}
useActionCable(channelParams, channelHandlers); // doesn't subscribe until channelParams is present
return <p>Subscription is not created until organizationId is fetched.</p>;
}
export default SomeOtherComponent;
<ActionCableProvider url="path to cable">{children}</ActionCableProvider>
useActionCable(params, handlers)
params
must includechannel
and then any number of additional paramshandlers
provides a hash of handler functions
- Fork it
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request