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

Styled-Components&React:如何避免杂乱?

陶和歌
2023-03-14

我最近开始将样式化组件与React一起使用,我不确定我是否正确地处理了一个不断重复出现的特定情况。

假设我有一个非常简单的组件,比如label,它只需要非常多的样式和一些给定的内容。我现在要处理的事情如下:

import React from "react";
import styled from "styled-components";

export type Props = {...};

export const Impl = styled.span`
  display: inline-block;
  padding: 0 4px;
  ...
`;

export const Label: React.FC<Props> = ({ text }) => <Impl>{ text }</Impl>;

我发现首先定义基本组件,如impl,只针对样式,然后再定义另一个组件,它接受道具并使用该样式组件。

有没有更短的方法只在一个组件中完成这两个任务?我希望能有一些像...

export const Label = styled.span<Props>=`
  ...styles...
`({ label }) = { label };

...但那似乎不起作用。

共有1个答案

顾正初
2023-03-14

您可以这样做的一种方法是使用styled工厂并只内联您的组件--尽管这种关系相反,因为您不是使用styled.span,而是只通过styled-components生成的classname来设计您自己的组件。这也意味着您需要在道具的类型中包含classname,或者使用实用工具类型来添加它。

type Props = {
  text: string;
  className?: string;
};

const Label = styled(({ text, className }: Props) => (
  <span className={className}>{text}</span>
))`
  display: inline-block;
  padding: 0 4px;
  color: red;
`;

export default function App() {
  return (
    <>
      <Label text="foo" />
    </>
  );
}

您还可能更喜欢以下内容:

const Label = styled(({ text, ...props }: Props) => (
  <span {...props}>{text}</span>
))`
  display: inline-block;
  padding: 0 4px;
  color: red;
`;

或使用实用工具类型:

type SCP<T> = T & { className?: string };

type Props = {
  text: string;
};

const Label = styled(({ text, ...props }: SCP<Props>) => (
  <span {...props}>{text}</span>
))`
  display: inline-block;
  padding: 0 4px;
  color: red;
`;
 类似资料:
  • 问题内容: 我在我的应用程序中使用样式组件在CodeSandbox中。请参考以下网址 https://lrn6vmq297.sse.codesandbox.io/ 每当我进行一些更改时,控制台都会说。 className 而且UI无法按预期呈现。有人知道我为什么遇到这个问题吗?请查看上面的网址。 谢谢 问题答案: 基本上,您需要通过或生成的解构,然后将其手动应用于要设置样式的组件。否则,您不会将应

  • 我正在使用在我的应用程序中实现一个亮/暗主题。不确定这是否太重要了,但我正在使用打字脚本。我还是一个新的反应和ts。 当组件是一个基本的HTML元素时,这是很简单的: 或者在自定义组件上(我可能拥有也可能不拥有该类型)。这里,我将从中对进行样式化: 然而,当我需要对没有显式呈现的组件进行样式化时,我会遇到麻烦。对于上面的例子,我显然在代码的某个地方有: 但是关于样式呢,比如说我自己不呈现的的子级?

  • Styled React Boilerplate ⚛️ �� Minimal & Modern Boilerplate for building apps with React & styled-components Demo Site •FAQ Highlights Less complex than create-react-app Features styled-components Use

  • 今天我开始学习ReactJS,一个小时后我就开始面对这个问题。。我想在页面上的div中插入一个有两行的组件。下面是我正在做的一个简化示例。 我有一个html: 渲染功能如下: 下面我调用渲染: 生成的HTML如下所示: 我不是一个非常高兴的问题,这个问题迫使我将所有内容都打包在一个div“DeadSimpleComponent”中。在没有显式DOM操作的情况下,最好且简单的解决方法是什么? 201

  • 问题内容: 我正在尝试通过从客户端向服务器发送密钥和随机数来认证用户。 我的代码未向我显示客户端的响应。执行下面的代码时,我得到了一个空指针异常。 问题答案: 解决大多数问题的固定步骤: 阅读堆栈跟踪以确定哪一行代码引发NPE 在该行代码处设置一个断点 使用调试器,在遇到断点时,确定该行中的对象引用是 弄清楚为什么引用该文件(到目前为止,这是唯一实际的困难部分) 解决根本原因(也可能很困难)

  • 问题内容: 我有两个简单的Java代码。第一个将恒定功率定义为power = a.pow(b); 第二个将恒定功率定义为power = BigInteger.ONE.shiftLeft(b) 在命令行中设置内存标志- Xmx1024m,第一个代码可以正常工作,但是第二个代码却出现错误:java.lang.OutOfMemoryError:Java堆空间 我的问题:我应该在第二个代码中更改什么以避免