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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@thejohnfreeman/observer

v1.0.1

Published

A higher-order component for reactive updates.

Downloads

1

Readme

observer

A higher-order component for reactive updates.

npm code style: Prettier build status

What about mobx-react?

There are two primary differences between this observer higher-order component (HOC) and the one of the same name from mobx-react. These differences both serve to simplify the implementation of this HOC.

  1. This HOC does not try to add methods to an existing class component and return it. Instead, the component class that this HOC returns manages the instance of the component type you pass in, instead of letting React manage it.

  2. This HOC does not try to take an existing React component and make it reactive while respecting all the lifecycle methods. Instead, it tries to take a component from a specific subset of React components, those with only a render method and no lifecycle methods, and make it reactive in the most straightforward way.

Usage

If your component uses all of its props and passes them unchanged to other components, then it is fine to pass a stateless functional component to this HOC, but you won't get much benefit unless the component is "branching", i.e. it renders more than one non-terminal (i.e. non-HTML) component.

const BranchingComponent = ({ a, b, c}) => (
  <A a={a}>
    <B b={b} />
    <C c={c} />
  </A>
)

If all your component does is mutate props or add constant props for the one component that it renders, then it is likely faster and more memory efficient to just let it run on every render. Plus, you might check if your component's purpose is already served by a HOC from recompose.

const Before = (Component) => ({ x }) => <Component x={x + 1} />
import { mapProps } from 'recompose'
const After = mapProps(({ x }) => ({ x: x + 1 }))

However, if your component uses a subset of its props or derives props that change less frequently than its props as a whole, then the observer HOC will serve you well.

import { computed } from 'mobx'
import { observer } from '@thejohnfreeman/observer'
class MyComponent extends React.Component {
  @computed
  private get x() {
    return this.props.x + 1
  }
  public render() {
    return <X x={this.x} />
  }
}
export default observer(MyComponent)