【问题标题】:Why is Styled Components Generating an Object?为什么样式化组件会生成对象?
【发布时间】:2020-07-15 21:05:47
【问题描述】:

我有一些使用样式化组件的非常基本的代码:

import styled from 'styled-components';

const Test = () => <div>foo</div>;
const StyledTest = styled(Test)`
  border: 10px solid red;
`;
console.log(typeof StyledTest); // object!!!

问题是,最后一个console.log 行记录了object(不是function),当我尝试使用它时当然会导致错误。

当我尝试为库中的组件设置样式时也会发生这种情况:

import Modal from 'react-modal';
const StyledModal = styled(ReactModalAdapter)`
  border: 10px solid red;
`;
console.log(typeof StyledModal); // object!!!

我做错了什么?

【问题讨论】:

  • 虽然这里的答案回答了我的问题,但对于遇到我遇到的问题的任何人(即,如果您收到关于您的 StyledTest-equivalent 不是函数/类的错误),答案很可能是您的 React/Styled Components 版本不同步。见:stackoverflow.com/questions/52973213/…

标签: reactjs styled-components


【解决方案1】:

样式组件元素的console.log 将始终是object

为了您的代码正常工作,您需要将StyledTest 更改为:

const StyledTest = styled.div`
  border: 10px solid red;
`;

并在Test中使用它:

const Test = () => <StyledTest>foo</StyledTest>;

首先,您需要设置样式,然后应用您正在创建的内容。

要像你一样创建,你在StyledTest中传递的参数应该是一个样式组件,所以如果你有类似的东西:

const Test = styled(({ ...rest }) => <div {...rest} />)`
  border: 10px solid red;
`;

const StyledTest = styled(Test)`
  border: 10px solid blue;
`;

在该示例中,Test 是一个样式组件元素,因此您可以对其进行编辑。

【讨论】:

  • 谢谢,这是我错过的必须通过道具的部分......他们将其隐藏在文档中! ;)
  • 没问题?是的,总是很难在文档中找到所有内容。 ? 有时候我不喜欢文档。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 2017-11-17
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
相关资源
最近更新 更多