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

@abw/react-context

v2.1.0

Published

Utilities for working with React contexts

Downloads

18

Readme

react-context

Introduction

This is a small and simple module that provides some syntactic sugar to streamline the use of React Context to maintain state in your React applications.

It is simple and small (less than 1kB compressed) and has no external dependencies other than React.

If you're not already familiar with React Context then you should start by reading the React Context documentation: https://react.dev/reference/react/useContext

Note that this module supercedes its predecessor @abw/react-context-generator.

Getting Started

Add the @abw/react-context module to your project using your favourite package manager.

## using npm
$ npm add @abw/react-context

## using yarn
$ yarn add @abw/react-context

## using pnpm
$ pnpm add @abw/react-context

You can then import the modules and start using them.

import { Context, Generator } from '@abw/react-context'

Documentation

Visit the documentation web site for detailed documentation.

Quick Example

Define a React component that uses state along with any functions you want to expose to update the state.

Wrap the component in a call to the Generator function when you export it as the default.

Your component will be passed a render function which it should call, passing in the state and any functions that you want to share. The component should return the result of the render() call.

For example, this is the Counter.js component.

import { useState } from 'react'
import { Generator } from '@abw/react-context'

const Counter = ({initialCount=0, render}) => {
  const [count, setCount] = useState(initialCount)
  const inc = (n=1) => setCount(count + n)
  const dec = (n=1) => setCount(count - n)

  return render({
    count, inc, dec
  })
}

export default Generator(Counter)

Import your component into your application and use the .Provider to define the context provider.

import React    from 'react'
import Counter  from './Counter.js'
import Count    from './Count.jsx'
import Controls from './Controls.jsx'
import Bignum   from './Bignum.jsx'

export const App = (props) =>
  <Counter.Provider {...props}>
    <Count/>
    <Controls/>
  </Counter.Provider>

export default App

Any components inside the scope of the provider can access the content. They can do this by wrapping themselves in a call to the .Consumer.

Here's the Count.jsx component.

import React   from 'react'
import Counter from './Counter.js'

const Count = ({count}) =>
  <p>
    The current count is {count}
  </p>

export default Counter.Consumer(Count)

Or they can call the .Use function to access the context.

import React   from 'react'
import Counter from './Counter.js'

const Count = ({count}) => {
  const { count } = Counter.Use()
  return (
    <p>
      The current count is {count}
    </p>
  )
}

export default Count

Notes for Maintainers

Check out the repository.

$ git clone https://github.com/abw/react-context.git
$ cd react-context

Install the dependencies.

$ pnpm install

To run the development server.

$ pnpm dev

To run the tests.

$ pnpm test

To build for production.

$ pnpm build

To build the documentation.

$ pnpm build:docs

To preview the documentation.

$ pnpm preview

Project Structure

The main project code is in the lib directory. The index.js is the main entry point.

Running pnpm build creates a production build in the dist directory.

The src directory contains the web site for development, testing and documentation. The index.html is the main entry point.

Running pnpm dev runs a development web server for the site.

Running pnpm build:docs builds the site and saves the bundled output in the docs directory. Any additional resources in the public directory will be included in there.

The styles directory contains SASS stylesheets used by the web site. The main.scss file is the main stylesheet which is imported into src/main.jsx.

The test directory contains test scripts which will be run by pnpm test. The test/setup.js file is a special setup file. Any files in test/lib are assumed to be components used by tests and are not test scripts in their own right. They are ignored by the test runner.

Notes

This was originally released as the @abw/react-context-generator module and supercedes it. That module is still available but will not have any further development.

Author

Andy Wardley, https://github.com/abw