【问题标题】:Uncaught TypeError: Object(...) is not a function at eval (global-styles.js)Uncaught TypeError: Object(...) is not a function at eval (global-styles.js)
【发布时间】:2018-12-10 22:28:27
【问题描述】:

我将我的项目从反应样板 3.5.0 迁移到 3.7.0。样板结构发生了一点变化,需要更新一些依赖,但最终 webpack 编译没有错误。

但这是我浏览器的控制台:

这是global-styles.js文件的内容:

import { injectGlobal } from 'styled-components';

/* eslint no-unused-expressions: 0 */
injectGlobal`
  html,
  body {
    height: 100%;
    width: 100%;
  }

  body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
  }

  body.fontLoaded {
    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  }

  #app {
    background-color: #3892d3;
    min-height: 100%;
    min-width: 100%;
  }

  p,
  label {
    font-family: Georgia, Times, 'Times New Roman', serif;
    line-height: 1.5em;
  }    
  
  .row {   
    margin: 0px;
    padding: 0px;
  }
  
  .main .container-fluid {
    padding: 0px 6px 0px 6px;
    margin: 0px ;
    height: 100%;
    min-width: 440px;
    // background: #ffffff;
    // height: calc(100% - 5px);
  }
  
  .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,
  .col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,
  .col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,
  .col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,
  .col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,
  .col-xl-auto {
    position: relative;
    width: 100%;
    min-height: 1px;
    padding-right: 5px;
    padding-left: 5px;
  }
`;

我尝试删除此文件并评论对它的引用,但问题是我不知道如何解决这个问题,因为它在升级之前工作正常。

关于如何解决这个问题的任何线索?

【问题讨论】:

  • 是否可以有一个 MVCE 或者代码库太复杂?

标签: javascript reactjs react-boilerplate


【解决方案1】:

React 样板 3.7.0 不再使用 styled-components v3。它已迁移到 v4。 styled-components v4 不再使用 injectGlobal 函数。它被createGlobalStyle API 取代。您收到的错误是因为没有像 injectGlobal 这样的东西。

正如文档所说:

const GlobalStyles = createGlobalStyle`
  html {
    color: 'red';
  }
`;

// then put it in your React tree somewhere:
// <GlobalStyles />

【讨论】: