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

umi-plugin-recoil

v1.1.0

Published

plugin-recoil for [email protected]

Downloads

24

Readme

umi-plugin-recoil

NPM version NPM downloads

A plugin for [email protected] to help you set RecoilRoot.

What is Recoil?

Recoil provides a fast and flexible way to share state across components with React Hooks Api.

What does this plugin do?

  • [x] Inject RecoilRoot to umi root container. So you can use useRecoilState in your code without declaring a RecoilRoot context.
  • [x] Provide an useRecoilObjState Api which can shallow merge your object-type state when calling setState.
  • [ ] list-type state operator
  • [ ] history-travel state operator
  • [ ] RecoilRoot options

How to use?

Install dependencies with npm or yarn in you umijs@3 project

npm install umi-plugin-recoil recoil
# or
yarn add umi-plugin-recoil recoil

Create Recoil Atom in the right place

I am used to place the Atom inside 'recoil' folder like this.

recoil-folder

Create Atom

Use atom to create a store that can be shared across your project.

import { atom } from 'recoil';

const myState = atom({
  key: 'myState',
  default: 'val',
});

export default myState;

You can also create an object-type Atom.

import { atom } from 'recoil';

const myObjState = atom({
  key: 'myObjState',
  default: {
    name: 'this is an object',
    value: 123,
  },
});

export default myState;

See more

Use state in your code

Use useRecoilState like useState to implicitly subscribe the component to the given state.

import React from 'react';
import { useRecoilState } from 'recoil';
import myState from '@/recoil/myState';

export default () => {
  const [state, setState] = useRecoilState(myState);

  return (
    <div>
      <div>{state}</div>
      <button
        onClick={() => {
          setState('clicked');
        }}
      >
        Click
      </button>
    </div>
  );
};

See more

[Special] Merge object-type state when setState

This plugin provides an useRecoilObjState Api which allow you subscribe an object-type atom and shallow merge the object when calling setState.

You should import the useRecoilObjState Api from umi;

import React from 'react';
import { useRecoilObjState } from 'umi'; // import from umi
import myObjState from '@/recoil/myObjState'; // see above

export default () => {
  const [objState, setObjState] = useRecoilObjState(myObjState);

  return (
    <div>
      <div>{objState.name}</div>
      <div>{objState.value}</div>
      <button
        onClick={() => {
          // objState will change to { name: 'this is an object', value: 888 } ;
          setObjState({
            value: 888,
          });
        }}
      >
        Click
      </button>
    </div>
  );
};