当前位置: 首页 > 知识库问答 >
问题:

tailwindcss - testing-library/react中的render渲染得到的dom中是如何包含外部的css样式的?

罗波鸿
2024-05-27

testing-library/react中的render渲染得到的dom中是如何包含外部的css样式的?

这里只获取了一个react element,但是它的外部样式是如何整合到最终的dom上的呢?

render(<Component />)

vite + react + tailwindcss项目来说吧,样式是在/src/index.css

// src/index.css@tailwind base;...

配置

  • vitest配置中设置css: true
  • setUpFiles中导入src/index.css

问题:

  • 最终渲染得到的dom就包含css样式了吗?
  • 这里的tailwindcss需要先解析(自定义的类名,需要生成对应的规则...),这又是谁负责的呢?
  • 整个流程是什么样的呢? vite参与吗了?如果参与了,vite是如何参与?它又做了什么呢?

共有1个答案

孔鸿宝
2024-05-27

问题一:最终渲染得到的dom就包含css样式了吗?

答案

不是。testing-library/reactrender函数返回的DOM节点本身并不直接包含外部的CSS样式。render函数只是用于在测试环境中模拟React组件的渲染,它会返回一个查询工具集,帮助你查询和操作渲染出来的DOM节点。

问题二:这里的tailwindcss需要先解析(自定义的类名,需要生成对应的规则...),这又是谁负责的呢?

答案

在构建或开发过程中,Tailwind CSS 的解析工作是由构建工具(如Vite)和相关的预处理器或加载器(如PostCSS和Tailwind CSS插件)来完成的。这些工具会读取你的CSS文件(如src/index.css),解析Tailwind CSS的指令,并将自定义的类名转换为实际的CSS规则。

问题三:整个流程是什么样的呢?vite参与了吗?如果参与了,vite是如何参与?它又做了什么呢?

答案

整个流程大致如下:

  1. 开发或构建时

    • Vite 是一个构建工具和开发服务器,它会监听文件变化并实时地处理这些文件。
    • Vite检测到CSS文件(如src/index.css)变化时,它会使用配置的插件和加载器(如PostCSS和Tailwind CSS插件)来解析和转换这些文件。
    • Tailwind CSS插件会解析@tailwind指令,并根据配置生成相应的CSS规则。
    • 转换后的CSS会被内嵌到HTML文件中或通过HTTP请求发送到浏览器。
  2. 浏览器渲染时

    • 当浏览器加载HTML文件时,它会解析HTML并下载引用的CSS资源。
    • 下载的CSS样式会应用到DOM元素上,根据CSS选择器匹配规则来应用样式。
  3. 测试时

    • 使用testing-library/reactrender函数时,它会在一个隔离的测试环境中模拟组件的渲染。
    • 渲染得到的DOM节点不直接包含外部CSS样式,但可以通过查询工具集来检查和操作这些节点。
    • 测试环境通常会模拟浏览器的某些行为,比如处理CSS类名和样式,但具体的CSS解析和样式应用通常不在测试环境的职责范围内。

在这个过程中,Vite主要负责构建和开发时的文件处理和转换工作,确保Tailwind CSS能够被正确解析和转换,并将其应用于最终构建的应用中。而在测试环境中,testing-library/react则关注于模拟组件的渲染和提供查询工具集,以便进行单元测试。

 类似资料:
  • 问题内容: 每当我尝试在React的中使用Font Awesome图标时,尽管它可以在普通HTML中运行,但它不会显示在结果网页上。 这是一个实时示例:http : //jsfiddle.net/pLWS3/ 哪里错了? 问题答案: React使用属性,例如DOM。 如果您使用开发版本,并查看控制台,则会出现警告。您可以在jsfiddle上看到它。 警告:未知的DOM属性类。您是说classNam

  • 在服务器端react中使用react路由器dom会创建错误。 如果url匹配我的组件路径,我将使用react router dom BrowserRouter在div中呈现我的组件。 然后使用以下代码以特定div为目标渲染我的组件: 但此代码仅在客户端react中工作。如何将此实现到服务器端?

  • 问题内容: 是否可以从外部源获取HTML / JSX内容并在React中动态呈现它?在我们的例子中,我们想从Wordpress API中获取内容,并在客户端和服务器上都进行渲染(我们正在使用NextJS) 因此,Wordpress API返回一个JSON响应,其中包括一个content属性,该属性是一串HTML / JSX。内容看起来像这样。 因此,如您所见,它将是HTML和React组件/ JS

  • 问题内容: 如何在样式组件中使用条件渲染以使用React中的样式组件将按钮类设置为活动状态? 在css中,我会这样做: 在样式化的组件中,如果我尝试在类名中使用“ &&”,则不喜欢它。 问题答案: 你可以简单地做到这一点 在您的样式中,如下所示:

  • 问题内容: 对我的应用程序使用的各种视图使用单独的样式表的正确/可接受的方法是什么? 目前,我在视图/部分的html顶部放置了一个link元素,但有人告诉我这是一种不好的做法,即使所有现代浏览器都支持它,但我可以理解为什么对此不满意。 另一种可能性是将单独的样式表放在我的index.html中,但是我希望它仅在以性能名义加载其视图时才加载样式表。 这是不好的做法吗,因为样式只有在将css从服务器加

  • 问题内容: 我非常喜欢React中的内联CSS模式,并决定使用它。 但是,您不能使用和类似的选择器。那么,在使用内联CSS样式时实现悬停时高亮显示的最佳方法是什么? 该有一个状态,并将其作为道具的链接。但是,(我的方式来实现它)包裹的,以便它可以设置并给它。不过,这会使事情有些复杂(例如,包裹在行为上与有所不同)。 有没有更简单的方法? 问题答案: 我处于同样的情况。确实像在组件中保留样式的模式,