javascript - 样式化组件引用错误 : Cannot access 'Component' before initialization

标签 javascript reactjs styled-components craco

在样式化的组件中引用另一个组件时,我收到此错误

ReferenceError: Cannot access 'SiteHeader' before initialization


这是代码
//Common.ts

import styled from 'styled-components/macro';
import { SiteHeader } from '../Theme/Layout/Header';

export const Container = styled.div`
    padding: 0 15px;
    ${SiteHeader} & {
        padding-top: 20px;
        padding-bottom: 20px;
    }
`;

//header.tsx

import { Container } from '../../Styles/Common';
import styled from 'styled-components/macro';

export default function Header(): JSX.Element {
    return (
        <SiteHeader>
            <Container>
                {/*navigation*/}
            </Container>
        </SiteHeader>
    );
}

export const SiteHeader = styled.header`
    background: var(--green-kelp);
`;

最佳答案

看起来这里的问题是存在循环依赖; Common.ts正在导入 header.tsx , 和 header.tsx正在导入 Common.ts .结果,构建工具无法确定应该首先解析哪个文件,并且 SiteHeader解析时未定义 Container .这是一个 JS 问题,而不是样式组件问题。
此问题的解决方案是确保导入仅在 1 个方向上进行。最简单的方法是移动 SiteHeader到自己的文件中:
SiteHeader.js:

const SiteHeader = styled.header`
    background: var(--green-kelp);
`;

export default SiteHeader
常见的:
import { SiteHeader } from './SiteHeader';

export const Container = styled.div`
    padding: 0 15px;
    ${SiteHeader} & {
        padding-top: 20px;
        padding-bottom: 20px;
    }
`;
标题:
import styled from 'styled-components/macro';

import SiteHeader from '../SiteHeader';
import { Container } from '../../Styles/Common';

export default function Header(): JSX.Element {
    return (
        <SiteHeader>
            <Container>
                {/*navigation*/}
            </Container>
        </SiteHeader>
    );
}

关于javascript - 样式化组件引用错误 : Cannot access 'Component' before initialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68108532/

相关文章:

javascript - 语义 UI react - 在下拉选择上实现弹出窗口

javascript - 样式化组件未包装另一个样式化组件

reactjs - div 标签和在样式组件中输入 any 的问题(Gatsby 应用程序)

javascript - 如何在 React Native 中使用 Tamagui 添加全局样式

javascript - 如何在图像上方的列中心画一条黑线?

javascript - 给定一个外盒和内盒,确定内盒的位置

javascript - Nodejs 服务器在解析之前的输入之前生成输入表单

javascript - iOS 网络应用程序 : disable autofocus on input text field

reactjs - Material UI - 排版 fontSize

javascript - 在 Android 移动浏览器上调用 Window.scrollTo() 会导致 TypeError : No function was found that matched the signature provided