npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

socketio-hooks

v0.0.7

Published

Package containing React Hooks for Socket IO

Downloads

14

Readme

SocketIO Hooks

What is it

socketio-hooks is a library which provides a bunch of React Hooks to easily connect and manage SocketIO.

Installation

You can get the latest release using npm:

$ npm install --save socketio-hooks

Example

In order to be able to use the hooks, you first have to render the Provider somewhere before your component and pass the connection options, like:

import React from "react";
import { SocketIOProvider } from "socketio-hooks";

const Providers: React.FunctionComponent<{}> = ({ children }) => {
  return (
    <SocketIOProvider
      url="http://localhost:8080/"
      namespaces={["feed", "chat"]}
      connectionOptions={{ query: { hello: "world" } }}
    >
      ...
      {children}
      ...
    </SocketIOProvider>
  );
};

IMPORTANT until we solve some issues it is recommended that you put the Provider very close to the root of your app, similar to what you would do with a Redux Provider

And then in your component, you can import any hook like this:

import React, { useState } from "react";
import { useSocket, useEvent, useNamespace, useEmit } from "socketio-hooks";

const Feed: React.FunctionComponent<{}> = ({}) => {
  const [tweets, setTweets] = useState([]);

  // You can use this hook, which provides the event and the namespace socket
  const socket = useSocket("new.tweet", "feed", tweet => {
    setTweets(tweets => [...tweets, tweet]);
  });

  // You can get the socket instance for the namespace you want
  const defaultSocket = useNamespace();
  // Or
  const feedSocket = useNamespace("feed");

  // Or you can use granular hooks to have a better control in your code, like this
  useEvent("new.tweet", "feed", tweet => {
    setTweets(tweets => [...tweets, tweet]);
  });
  const sendTweet = useEmit("send.tweet", "feed");

  // You can also have multiple events registered
  useSocket("new.message", "chat", message => {
    console.log(`Someone sent me this message: ${message}`);
  });

  const onButtonClick = () => {
    sendTweet("Sending a tweet is so easy");
  };

  return (
    <>
      <ul>
        {tweets.map(tweet => (
          <li>{tweet}</li>
        ))}
      </ul>
      <button onClick={onButtonClick}>Send a Tweet</button>
    </>
  );
};

API

SocketIOProvider

| Prop | Required | Default | Type | Description | | ----------------- | -------- | --------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | url | true | | string | Url used to connect to the server | | namespaces | false | [] | string[] | Namespaces to connect. If no one provided, the only namespace available will be the default ("/") | | connectionOptions | false | undefined | SocketIOClient.ConnectOpts | Object with options to be passed when connecting to SocketIO |

useNamespace()

Parameters

  • namespace | String - Required. Namespace to return the socket;

useEvent()

Parameters

  • event | String - Required. Event which the socket will listen to.
  • namespace | String - Optional. Namespace which the event will listen.

useEmit()

Parameters

  • event | String - Required. Event which the socket will emit the message to.
  • namespace | String - Optional. Namespace which the socket will emit the message to.

useSocket()

Parameters

  • event | String - Required. Event which the socket will listen to.
  • namespace | String - Optional. Namespace which the event will listen.
  • callback | Function - Required. Function that will be called once the event is triggered.