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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mx-design/web

v0.1.9

Published

mxDesign Component for React

Readme

mx-design want to create the best tutorial project on github about how to build a react component library.

English | 中文

一个组件大致分为以下几个层次(对于简单组件没有分层,因为代码量太少了,没有必要),我们拿tree组件举例:

逻辑层

把tree组价的数据结构放在useReducer中,然后更改数据结构的方法放入useStore中,这样就组成了tree组件的主要操作逻辑,所有的逻辑修改都聚合到这一层。

如下:

const useStore = (props) => {
  const [data, setData] = useReducer(...);
  const handleClick = () => { ... }
  // ...
  return {
    data,
    handleClick,
    ...
  }
}

样式层

使用useClass hook和useStyle hook,把所有的样式都聚合到这一层。

const { wrapperClass, nodeClass } = useClass(...)

const { wrapperStyle, nodeStyle } = useStyle(...);

渲染层

因为在逻辑层已经拿到数据和例如click事件的注册方法,渲染层只要把数据和方法放到jsx元素上即可

样式也是如此,所以react的充当了一个渲染层(类似数据变化的逻辑都不在这里处理),就避免大量的useState去处理组件逻辑,让组件发可维护性大大降低。