如何使用开发工具轻松检查样式组件?

Joe*_*dee 8 styled-components

我在React项目中使用样式组件.在浏览器中呈现组件时,会为它们分配一个随机生成的类名,例如:

<div class="sc-KSdffgy oPwefl">

这个类名不能帮助我识别出来自哪个组件<div>,那么有没有办法轻松完成这个?

Ps目前我正在为我的样式组件添加attrs,以便我可以在开发工具中识别它们,例如:

const Foo = styled.div.attrs({
   'data-id': 'foo'
})`
    ...
`;
Run Code Online (Sandbox Code Playgroud)

mxs*_*tbr 18

这正是我们创建Babel插件的原因,在使用它时,您将获得包含您为组件命名的类名:

<div class="Sidebar__Button-KSdffgy oPwefl">
Run Code Online (Sandbox Code Playgroud)

最重要的是,我们也设置了displayName生成的组件,这意味着在您的React DevTools中,您将看到实际的组件名称,而不仅仅是<div>或<Styled(Component)>.

要使用Babel插件安装它,npm install --save-dev babel-plugin-styled-components然后将其添加到您的Babel配置:(例如在您的.babelrc)

plugins: ["styled-components"]
Run Code Online (Sandbox Code Playgroud)

而已!快乐的调试


请注意,如果您正在使用create-react-app,则无法更改Babel配置.我使用并建议react-app-rewired能够更改配置而无需弹出.我们还react-app-rewire-styled-components为您构建了自动集成样式组件Babel插件!

  • 这很棒,但我也想知道 - 有没有办法也看到传递给样式组件的道具?例如,假设我有一个 `&lt;Text primary&gt;...&lt;/Text&gt;`,我想在 devtools 中看到 `primary`,但目前它也是一个随机生成的类名。 (2认同)

N. *_*ppi 8

对于使用 create-react-app 的任何人,只需替换

import styled from "styled-components";
Run Code Online (Sandbox Code Playgroud)

import styled from "styled-components/macro";
Run Code Online (Sandbox Code Playgroud)

这将使您的样式组件类在其中包含其组件的名称。并且您只需查看它们的类名就可以知道哪些类引用了哪些组件;)

  • 感谢您更新问题@n-joppi (2认同)
  • 对我不起作用... (2认同)
  • 这不再起作用了。 (2认同)

Adr*_*nch 7

我正在考虑做同样的事情,并偶然发现以下内容作为 attrs 的替代方案:

const Section = styled.div`
  background-color: #06183d;
  color: white;
  padding: 16px;
  margin-top: 16px;
  ${breakpoint("md")`
    border-radius: 5px;
  `}
`

Section.defaultProps = {
  "data-id": "Section"
}
Run Code Online (Sandbox Code Playgroud)

使用 React.Component 的defaultProps. 它使调用更加styled.div干净,并且在需要时应该更容易删除。

结果是: 在此输入图像描述


Ret*_*Mac 6

对于使用 的任何人create-react-app,另一种选择是使用样式化组件 babel 宏

  1. npm install --save babel-plugin-macros
  2. 在您的组件内部使用import styled from 'styled-components/macro';而不是import styled from 'styled-components';

您现在应该在开发工具中看到组件名称:

在此处输入图片说明

  • 对我不起作用 (2认同)