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

renderhook

v0.1.0

Published

renderhook is a macro that allows hooks to transform or wrap what your component returns

Downloads

6

Readme

renderhook is a macro that allows hooks to transform or wrap what your component returns.

For example, this can be used flatten React's Context.Provider, add hidden elements to query or style elements, add a class name, and more.

You can then pull this logic out into reusable hooks, and keep your components very clean.

Install

First, ensure you have [babel-plugin-macros installed and configured][1]. If you're using create-react-app v2, it'll already be set up for you. Then install this plugin.

npm install --save renderhook
# or
yarn add renderhook

Usage

If we want to provide some Context to the children, we can easily create a reusable function for this, and make use of it in our components.

The value you pass to renderhook should be a two-item array, with the first value being what renderhook should directly return, and the second being a function that transforms the function component's return value.

import * as React from 'react';
import renderhook from 'renderhook/macro';

const useProvide = (Provider, value) => {
  return [
    // We don't need to give the caller of `useProvide` a value, so return renderHook(useProvide(...))
    // should return `null`
    null,

    // If something is returned from the function component, we can wrap it in a Provider to
    // allow the children to receive the value in context.
    // If our component has `return <Foo />` then `element` will be `<Foo />`
    (element) => element && <Provider value={value}>{element}</Provider>,
  ];
};

const Ctx = React.createContext(null);

function MyComponent() {
  renderhook(useProvide(Ctx.Provider, { x: 1 }));

  return <Foo />;
}

function Foo() {
  const { x } = React.useContext(Ctx);

  return <div>x is {x}</div>; // displays "x is 1"
}