【发布时间】:2021-01-25 02:11:30
【问题描述】:
这是我能想到的最基本的例子:
import React from 'react';
import {
css,
} from 'styled-components';
const Foo = (props) => {
console.log(props);
const {
children,
} = props;
return <div {...props}>{children}</div>;
};
export default () => {
return <div
css={css`
${Foo} {
background: #f00;
}
`}
>
<Foo>FOO</Foo>
</div>;
};
在此示例中,我想设置 Foo 组件的样式,它是 div 的后代。
我希望生成的标记看起来像:
<div class="test__Foo-wusfqk-0 hNfawX">FOO</div>
然而,它只是:
<div>FOO</div>
似乎没有在任何地方应用样式。
另外,组件Foo只被渲染一次,却被调用了两次,参数不同:
{children: {…}, theme: {…}}
children: {$$typeof: Symbol(react.element), key: null, ref: null, props: {…}, type: ƒ, …}
theme: {}
{children: "FOO"}
我应该提到我尝试过:
// @flow
import React from 'react';
import styled, {
css,
} from 'styled-components';
const Foo = styled((props) => {
const {
className,
children,
} = props;
return <div className={className}>{children}</div>;
});
export default () => {
return <div
css={css`
${Foo} {
background: #f00;
}
`}
>
<Foo>FOO</Foo>
</div>;
};
但是,在next.js 中执行此代码时,出现以下错误:
id为“sc-dlnjPT”的组件Styled(Component)已动态创建。
您可能会看到此警告,因为您在另一个组件中调用了 styled。
要解决这个问题,只需在任何渲染方法和函数组件之外创建新的 StyledComponents。
id为“sc-hKFyIo”的组件Styled(Component)已动态创建。
您可能会看到此警告,因为您在另一个组件中调用了 styled。
要解决这个问题,只需在任何渲染方法和函数组件之外创建新的 StyledComponents。
错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能是由于以下原因之一:
- 您可能有不匹配的 React 版本和渲染器(例如 React DOM)
- 您可能违反了 Hooks 规则
- 您可能在同一个应用中拥有多个 React 副本
考虑到主题代码 sn-p,这没有多大意义。
【问题讨论】:
-
您是否尝试过使用
styled? -
刚刚添加了关于使用
styled的评论。 -
你能把它发布为代码沙箱吗?
-
请注意,
styled-components似乎已经死了。我已经使用它很多年了,直到 v5 开始出现故障,没有任何修复。结果,我跳槽到@emotion/styled。它与 styled-components 非常相似,但它......只是有效。此外,它可以工作without a custom nextjs _document page!
标签: next.js javascript reactjs next.js styled-components