首页  >  文章  >  web前端  >  TailwindCSS 源代码中的 DefaultMap 类。

TailwindCSS 源代码中的 DefaultMap 类。

Barbara Streisand
Barbara Streisand原创
2024-10-10 06:18:02676浏览

在本文中,我们分析了 Tailwind CSS 源代码中的 DefaultMap 类。这是一个可以为不存在的键生成默认值的映射。生成的默认值被添加到地图中以避免重新计算。

/**
 * A Map that can generate default values for keys that don't exist.
 * Generated default values are added to the map to avoid recomputation.
 */
export class DefaultMap<T = string, V = any> extends Map<T, V> {
  constructor(private factory: (key: T, self: DefaultMap<T, V>) => V) {
    super()
  }

  get(key: T): V {
    let value = super.get(key)

    if (value === undefined) {
      value = this.factory(key, this)
      this.set(key, value)
    }

    return value
  }
}

在 JavaScript 中,我们有一个 Map API,但没有 DefaultMap。这个 DefaultMap 是一个自定义类,它扩展了 Tailwind CSS 源代码中的 Map。

让我们来理解这段代码。

constructor(private factory: (key: T, self: DefaultMap<T, V>) => V) {
    super()
}

DefaultMap 是一个具有需要工厂函数的构造函数的类。 super() 调用父类的构造函数,在本例中,这是 Map API,工厂函数的第二个参数是 self:DefaultMap;这意味着它可以访问 Map 实例。

DefaultMap是如何初始化的?

让我们找一个初始化 DefaultMap 的例子。 design-system.ts 演示了 DefaultMap 的用法。

DefaultMap class in TailwindCSS source code.

let parsedVariants = new DefaultMap(
                        (variant) => parseVariant(variant, designSystem)
                     );

这里(变体)=> parseVariant(variant, designSystem) 成为我们的工厂方法,如果键不存在,它会添加默认值。

return {
      kind: 'arbitrary',
      selector,
      compounds: true,
      relative,
  }

这是parseVariant函数返回的值。

关于我们:

在 Think Throo,我们的使命是教授开源项目中使用的高级代码库架构概念。

通过在 Next.js/React 中练习高级架构概念,将您的编码技能提高 10 倍,学习最佳实践并构建生产级项目。

我们是开源的 — https://github.com/thinkthroo/thinkthroo (请给我们一颗星!)

我们还提供网络开发和技术写作服务。请通过hello@thinkthroo.com联系我们了解更多信息!

参考文献:

  1. https://github.com/tailwindlabs/tailwindcss/blob/next/packages/tailwindcss/src/utils/default-map.ts#L5

  2. https://github.com/tailwindlabs/tailwindcss/blob/c01b8254e822d4f328674357347ca0532f1283a0/packages/tailwindcss/src/design-system.ts#L40

  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

  4. https://github.com/tailwindlabs/tailwindcss/blob/c01b8254e822d4f328674357347ca0532f1283a0/packages/tailwindcss/src/candidate.ts#L511-L516



以上是TailwindCSS 源代码中的 DefaultMap 类。的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn