请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Attempted import error: 'injectGlobal' is not exported from 'styled-components'.

Attempted import error: ‘injectGlobal’ is not exported from ‘styled-components’.老师这个reset.css加进来总出现这样的错误怎么回事呢?

正在回答

7回答

最新版的 styled-components v4 已经将原有的 injectGlobal 方法替换成了 createGlobalStyle ,而且用法也和之前的 injectGlobal 方法不同了

(直接像 injectGlobal 方法一样写 createGlobalStyle`/***CSS样式***/` 并不能生效,要定义一个全局样式的变量)

看了一下官方文档,尝试解决了问题:

  • 首先引入新的API createGlobalStyle ,在下面创建一个 GlobalStyle 变量,用 createGlobalStyle 方法把 reset 样式包裹在其中:

//img1.sycdn.imooc.com//szimg/5bc740d40001c74908230267.jpg

  • 在 'src/index.js'中,去掉对 './style' 的引入(不在这里引入了):

//img1.sycdn.imooc.com//szimg/5bc7422000014e5c08140223.jpg

  • 在 'src/App.js' 中,引入刚刚定义的 GlobalStyle ,然后将 <GlobalStyle /> 放在 render() 中最外层元素下面:

//img1.sycdn.imooc.com//szimg/5bc7432e0001b65507900517.jpg

这样后面的所有元素组件都应用了 GlobalStyle 中定义的 CSS Reset 样式了

14 回复 有任何疑惑可以回复我~
  • Dell #1
    感谢同学解答
    回复 有任何疑惑可以回复我~ 2018-10-18 22:50:41
  • 提问者 JOYer2018 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-10-19 10:10:02
  • 现在报了个警告styled-components.browser.esm.js:2222 The global style component sc-global-105358235 was given child JSX. createGlobalStyle does not render children.这是什么原因呢
    回复 有任何疑惑可以回复我~ 2018-10-22 22:27:51
雪原小狼狼 2018-10-23 00:54:59

还有可能要注意一下,如果遇到类似警报:styled-components.browser.esm.js:2222 The global style component sc-global-105358235 was given child JSX. createGlobalStyle does not render children.

说明全局样式组件下存在子节点。createGlobalStyle不会去渲染子节点,这时应该检查一下你的<GlobalStyle>组件下是否包裹了其他子节点?

https://img1.sycdn.imooc.com//szimg/5bce00290001dd7406960389.jpg

正确的用法是我上图中所展示的,我创建的<GlobalStyle />是个单标签,而不是下图中<GlobalStyle></GlobalStyle>这样的封闭标签(即使你用了封闭标签,也不应该在其内部添加任何子节点或组件),你只需要保证<GlobalStyle />标签在你整个React树的最上方(即App.js中)即可渲染后面的<Header />等其他所有组件。 

https://img1.sycdn.imooc.com//szimg/5bcdffec0001f66607790418.jpg


=================== 

在 styled-components.browser.esm.js 的第2261行,可以看到出现该警告的判断条件是:

https://img1.sycdn.imooc.com//szimg/5bce0086000193ca12790124.jpg

前半部分是项目的环境变量,主要是后半部分React.Children.count(this.props.children),意思是当前组件(即我们创建的<GlobalStyle>组件)下的子节点的计数,子节点不为0的时候会发出警报,告知我们全局变量组件中存在子节点,子节点不能被渲染

1 回复 有任何疑惑可以回复我~
  • psdf #1
    现在变这样
    
    ./node_modules/css-loader/lib/url/escape.js
    Error: ENOENT: no such file or directory............hello-jianshu\node_modules\css-loader\lib\url\escape.js
    回复 有任何疑惑可以回复我~ 2018-10-23 12:00:54
  • psdf #2
    已解决了 谢谢老师、同学
    回复 有任何疑惑可以回复我~ 2018-10-23 12:26:55
  • 似乎不能写{GlobalStyle},直接写GlobalStyle,不然也有错
    回复 有任何疑惑可以回复我~ 2018-11-12 14:29:30
半夜丶有狗叫 2018-10-17 19:01:18

https://img1.sycdn.imooc.com//szimg/5bc7160700013a8605830151.jpg可以把injectGlobal改为createGlobalStyle就可以了,因为styled-components版本升级了,原来的injectGlobal方法用不了

1 回复 有任何疑惑可以回复我~
psdf 2018-10-23 11:49:34

现在变这样

./node_modules/css-loader/lib/url/escape.js
Error: ENOENT: no such file or directory............hello-jianshu\node_modules\css-loader\lib\url\escape.js

0 回复 有任何疑惑可以回复我~
  • psdf #1
    已解决了
    谢谢老师、同学
    回复 有任何疑惑可以回复我~ 2018-10-23 12:24:13
itellboy 2018-10-17 17:19:57

我也是,刚刚遇到这个问题

0 回复 有任何疑惑可以回复我~
  • 提问者 JOYer2018 #1
    解决了没?
    回复 有任何疑惑可以回复我~ 2018-10-17 17:21:09
  • itellboy 回复 提问者 JOYer2018 #2
    没有,等老师,看怎么说
    回复 有任何疑惑可以回复我~ 2018-10-17 17:27:11
提问者 JOYer2018 2018-10-17 17:19:54

https://img1.sycdn.imooc.com//szimg/5bc6fe830001f61c06370460.jpg

https://img1.sycdn.imooc.com//szimg/5bc6fe380001023307370580.jpg

添加iconfont又这样了

0 回复 有任何疑惑可以回复我~
提问者 JOYer2018 2018-10-17 16:27:53

https://img1.sycdn.imooc.com//szimg/5bc6f25e0001426105150470.jpg

我这样写injectGlobal也没错啊

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信