【问题标题】:Import doesn't work when name doesn't start with capital letter当名称不以大写字母开头时,导入不起作用
【发布时间】:2016-10-26 21:56:24
【问题描述】:

转译此代码后不起作用

import React from 'react';
import ReactDOM from 'react-dom';
import firstLow from './moniesApp.js';

ReactDOM.render(<firstLow />, document.getElementById('content'));

但这确实

import React from 'react';
import ReactDOM from 'react-dom';
import FirstHigh from './moniesApp.js';

ReactDOM.render(<FirstHigh />, document.getElementById('content'));

在第一种情况下 babel 产生

_reactDom2.default.render(_react2.default.createElement('firstLow', null), document...

在页面上渲染了一个空的&lt;firstLow data-reactroot&gt;&lt;firstLow/&gt; 元素。

第二种情况

_reactDom2.default.render(_react2.default.createElement(_moniesApp2.default, null), document...

它有效。我的组件已渲染。

发生了什么事?

【问题讨论】:

    标签: reactjs ecmascript-6 babeljs


    【解决方案1】:

    发生了什么事?

    这是 JSX/React 中的约定。小写名称转换为字符串(标签),大写名称解析为变量(组件)。

    来自docs

    警告:

    组件名称始终以大写字母开头。

    例如&lt;div /&gt;代表一个DOM标签,但&lt;Welcome /&gt; 表示一个组件并要求Welcome 在范围内。

    【讨论】:

    • 谢谢。我至少浪费了 4 个小时。
    【解决方案2】:

    在 React 中,Component 名称以大写字母开头。小写的 JSX 标签代表文字 HTML 标签。 这是 React 规范的一部分

    这就是为什么&lt;foo&gt; 被翻译成createElement('foo'),而&lt;Foo&gt; 产生createElement(module.Foo)

    您应该用大写字母命名您的组件。没什么可做的。

    【讨论】:

    • Felix Kling 提前 13 秒回答,所以我接受了他的回答。不过谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2020-12-31
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多