[源码讲解]react为什么可以用module实现模块化?

先看下声明

// CSS modules
type CSSModuleClasses = { readonly [key: string]: string }

这个类型定义表示 CSSModuleClasses 是一个对象类型,其中每个属性的键都是字符串,而对应的属性值也是字符串。这意味着 CSSModuleClasses 对象中的每个属性名都是一个 CSS 类名,而对应的属性值是该类名对应的样式。

 然后声明

declare module '*.module.css' {
  const classes: CSSModuleClasses
  export default classes
}
declare module '*.module.scss' {
  const classes: CSSModuleClasses
  export default classes
}

declare module '*.module.css':声明了 .module.css 文件导出的模块类型。CSSModuleClasses 是一个对象类型,其中每个属性的键是字符串,而对应的属性值也是字符串。这表示 CSSModuleClasses 对象中的每个属性名都是一个 CSS 类名,而对应的属性值是该类名对应的样式。

说人话就是 你用*.module.css结尾的css文件它就会帮你默认导出一个cssModleClasses类型的对象,这个对象每个属性名都是一个 CSS 类名,而对应的属性值是该类名对应的样式,打印出来是哈希

比如我写一个模块css文件

引入

属性名转为哈希值了, 为什么?这是为了样式隔离, vue中用data-xxxxx属性选择器,也是为了样式隔离 

 而属性值也是哈希值

当属性值作为DOM元素的属性时,如果不经过处理直接将用户输入的值作为属性值传递给DOM,可能会存在安全风险。例如,如果用户能够控制某个属性的值,并且输入了恶意的脚本代码,那么在渲染时这段脚本代码可能会被执行,导致安全漏洞。

相关推荐

  1. React16: createRef与forwardRef实现

    2024-04-10 13:02:06       25 阅读
  2. React16: Component与PureComponent实现

    2024-04-10 13:02:06       32 阅读
  3. React16: Suspense与lazy实现

    2024-04-10 13:02:06       36 阅读
  4. React16: Hooks实现

    2024-04-10 13:02:06       36 阅读
  5. React16: React中FiberRoot的实现

    2024-04-10 13:02:06       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 13:02:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 13:02:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 13:02:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 13:02:06       20 阅读

热门阅读

  1. python复习 之 列表

    2024-04-10 13:02:06       14 阅读
  2. react17中使用setState导致了死循环

    2024-04-10 13:02:06       18 阅读
  3. Stream流中方法详解

    2024-04-10 13:02:06       14 阅读
  4. 自己总结的ICT云计算题库二

    2024-04-10 13:02:06       9 阅读
  5. 自己总结的ICT云计算题库

    2024-04-10 13:02:06       9 阅读