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

react-decorators

v1.2.2

Published

A collection of react decorators to enhance components capabilities

Downloads

47

Readme

React-decorators

npm/react-decorators

Build Status Coverage Status

A collection of react decorators to enhance components capabilities.

Feel free to open a PR with your own decorators. For large new features, please open an issue first.

Installation

The package is currently available only on npm.

npm install --save react-decorators

Usage

Everything is pretty much under construction

Decorators

classNames

What is does

Injects the classnames package directly into React's className property.

A simple JavaScript utility for conditionally joining classNames together. ... The classNames function takes any number of arguments which can be a string or object. ... If the value associated with a given key is falsy, that key won't be included in the output.

@classNames
class MyComponent extends React.Component {

    render() {
        return (
            <div className="classnames-examples">
                <span className={['foo', 'bar']} /> {/* class="foo bar" */}
                <span className={{selected: false, visible: true}} /> {/* class="visible" */}
                <span className={[null, {active: true}, false, [{nested: true}]]} /> {/* class="active nested" */}
                <span className={{hasClass: false}} /> {/* class="" */}
            </div>
        );
    }

}

cssModules

What is does

An extension of the classNames decorator, it binds the classnames package to React's className property using the alternate bind version for css-modules.

import styles from './styles.css';

@cssModules(styles)
class MyComponent extends React.Component {

    render() {
        return (
            <div className="my-class">
                // Content goes here
            </div>
        );
    }

}

Although it mixing between ES2015+ imports and CommonJS require, I find this syntax to be very readable.

@cssModules(require('./my-component.scss'))
class MyComponent extends React.Component { ... }

injectContext

What is does

This decorator receives a map of property names to context consumers, and injects these the consumers values as properties to the base component.

injectContext({propName: Consumer[, ...]})

@injectContext({
    theme: ThemeConsumer,
})
class MyComponent extends React.Component {

    render() {
        return (
            <div className={this.props.theme.container}>
                // Content goes here
            </div>
        );
    }

}