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

with-valued-data

v1.0.0

Published

this is a HOC for react components, it will conditionally render your components if your data has been valued and it will inject the valued data to your component

Downloads

11

Readme

with-valued-data

This is a HOC for react components. It will conditionally render your components if your data has been valued and it will inject the valued data to your component

##motivations

In react hooks rules there is a rule says "Don’t call Hooks in conditions" this is a rational rule but some times we want early return in our component for example we want to call our custom hooks only after an async data fetched from server or many other times which we want do nothing when something is not valued yet

##Usage with example


export default function XEntityView({xEntityId}) {
    const xEntity = useXEntity(xEntityId);
    
    if(!xEntity) 
        return null;
    
    const options = useOptions(xEntity);
    
    return (
        //...
    );
}

As you can see in this example useOptions depends on xEntity and when it's not valued yet there is no useful option so we can handle useOptions to expect undefined value and call useOptions before early return or we can use this HOC to make sure this component will render only if xEntity has been fetched


export default function XEntityView({xEntity}) {
    const options = useOptions(xEntity);
    
    return (
        //...
    );
}

export default withValuedData({xEntity: (props) => useXEntity(props.xEntityId)}, XEntityView)

and this is typescript version for those who loves typescript


export default function XEntityView({xEntity}: Props) {
    const options = useOptions(xEntity);
    
    return (
        //...
    );
}

interface Props {
    xEntity: XEntity;
    xEntityId: ID;
}

/*when you want to use it from parent component you don't need to pass xEntity to it and it will be injecting automatically*/
export default withValuedData({xEntity: (props/*will be infer*/) => useXEntity(props.xEntityId)}, XEntityView)

##Api ###param

  • provider: you can use provider in 2 ways (as you like)
    • a function which receive props and should return object of values which will check and inject to wrapped component (p: Props) => {[k in InjectingProps]: Value | undefined}
    • an object which its keys are injectingProps keys and it's value is a function which will receive props as argument and should return value or undefined {[k in InjectingProps]: (p: Props) => Value | undefined}
  • Comp: The wrappedComponent which will received valued props