样式化的组件导致 react-dom.production.min.js:4482 错误:缩小的 React 错误 #31;

Posted

技术标签:

【中文标题】样式化的组件导致 react-dom.production.min.js:4482 错误:缩小的 React 错误 #31;【英文标题】:Styled components cause react-dom.production.min.js:4482 Error: Minified React error #31; 【发布时间】:2020-02-24 05:05:36 【问题描述】:

样式化的组件会导致构建崩溃

伙计们,我对样式组件有疑问;/。

我正在使用 create-react-app 并且一切正常,直到我“npm run build”并将应用程序部署到我的 FTP 上。

我不断收到这个奇怪的错误,并没有在网上找到任何解决方案。我的代码附在下面。应该简单明了。

有什么想法吗?

import styled from 'styled-components';
import countriesJSON from './countries.json';

const Container = styled.div`
     max-width: 1200px;
     margin: 0 auto;
    `;

const Wrapper = styled.div`
        display: flex;
        flex-direction: column;
     height: 100vh;
         justify-content: center;
     align-items: center;

     `;

const Button = styled.button`
  background: whitesmoke;
  border-radius: 3px;
  height: 5vh;
  width: 20vw;
  border: 2px solid orange;
  color: 'slategrey';
  margin: 0 1em;
  padding: 0.25em 1em;

  &:hover 
    background: whitesmoke;
    transform: scale(1.2);
`;

const Text = styled.h1`
  font-size: calc(2vw + 10px);
  font-weight: bold;
  text-align: center;
  color: whitesmoke;

`;

const Paragraph = styled.p`
  color: whitesmoke;
  font-size: calc(1vw + 10px);
`;


const CountryWrapper = styled.div`
    display: flex;
    flex-direction: column;
    align-items: center;

    @media (min-width: 600px) 
     flex-direction: row;
     
`;

const CountryDetailsWrapper = styled.div`
    margin: 10px;
    text-align: center;
`;

const CountryImgWrapper = styled.div`

    img  
    height: 40vh;
    margin: 0 auto;
     width: 90vw;
     padding: 10px;
     

     @media (min-width: 596px) 
    img 
     width: 30vw;
    height: 30vh;
    
    
`;


class Homepage extends Component 
    constructor(props) 
        super(props);
        this.state = 
            randomCountry: '',

            isCountryWrapperVisible: false,
            countryFlag: '',
            countryRegion: '',
            countryCurrency: '',
            countryCapital: '',
            countryPopulation: '',
            countryTimezone: ''

        ;


    generateRandomCity = () => 

        let num = Math.floor(Math.random() * countriesJSON.length);
        this.setState(
            randomCountry: countriesJSON[num].name
        );
    ;

    componentDidUpdate() 
        this.fetchCountryInfo();
    


    fetchCountryInfo = () => 

        fetch(`https://restcountries.eu/rest/v2/name/$this.state.randomCountry`)
            .then(res => res.json())
            .then(response =>
                this.setState(
                    countryFlag: response[0].flag,
                    countryCapital: response[0].capital,
                    countryRegion: response[0].region,
                    countryCurrency: response[0].currency,
                    countryPopulation: response[0].population,
                    isCountryWrapperVisible: true
                )
            );

    ;


    render() 
        return (

            <Container>
                <Wrapper>
                    <Text> Test Your Knowledge of Flags </Text>
                    <Button onClick=this.generateRandomCity> HIT ME! </Button>


                    this.state.isCountryWrapperVisible && (
                        <CountryWrapper>

                            <CountryImgWrapper>
                                <img src=this.state.countryFlag alt='flag' className='img-fluid'/>
                            </CountryImgWrapper>

                            <CountryDetailsWrapper>
                                <Paragraph>  Name: this.state.randomCountry </Paragraph>
                                <Paragraph>  Capital: this.state.countryCapital </Paragraph>
                                <Paragraph>  Region: this.state.countryRegion </Paragraph>
                                <Paragraph>  Population: this.state.countryPopulation </Paragraph>

                          </CountryDetailsWrapper>

                        </CountryWrapper>
                    ) 

                </Wrapper>
            </Container>
        )
    


export default Homepage;```

【问题讨论】:

我怀疑这与styled-components 有什么关系,这个错误意味着您正在尝试在应用程序的某处渲染一个object 但是在开发版本中一切正常。它只在我制作生产版本时崩溃。无论上述情况如何,都应该出现这个错误,不是吗? 【参考方案1】:

原来问题在于我必须重新编码的父组件中的全局样式对象。

【讨论】:

以上是关于样式化的组件导致 react-dom.production.min.js:4482 错误:缩小的 React 错误 #31;的主要内容,如果未能解决你的问题,请参考以下文章

React 样式的组件在生产中导致构建错误,但在开发中运行良好

样式化的组件添加组件名称作为类名

如何聚焦样式化的组件?

样式化的组件和范围

React 和 Typescript,样式化的组件和子组件

样式化的组件继承不起作用