写作的主要好处是什么
import React, { Component } from 'react';
class Link extends Component {
...
}
而不是
import React from 'react';
class Link extends React.Component {
...
}
当谈到反应15.4.x ??
在我的观点和在我的情况下(如果我错了,请纠正我)从来没有关系:
webpack2
制作我的捆绑包; webpack.optimize.CommonsChunkPlugin
设置的minChunks: Infinity
插件,以确保所有供应商代码仅包含一次。从了解ES6导入如何工作我明白通过使用{Component}
的命名导入,我声明我只想在我的代码中使用Component
组件,它看起来更干净。
但由于整个React
包仍然在应用中使用,我可以使用React.Component
而不仅仅是Component
创建扩展类,并且在结果中,webpack仍会生成相同数量的代码,我的捆绑尺寸在两种情况下都是相同的。
我说错了吗?
答案 0 :(得分:9)
没有区别,byte[] bytes = Convert.FromBase64String(parameter);
string parameter= Encoding.UTF8.GetString(bytes);
与React.Component
是同一个对象,第二种方式在我看来更有说服力,因为它确实解释了你使用的是Component
对象Component
库。
第一个似乎是指成员,
但是,它来自javascript的React
,其中所有内容都必须附加到导出的全局命名空间(只是为了避免全局命名空间污染)。
可能是幕后的事情:
pre modules era
注意:正如有人所说,您还需要导入// this should be assumed as an example only.
class React { ... }
class Component { ... }
React.Component = Component;
// ES6
export {Component}
export default React;
// ES5
window.React = React;
,因为React
需要在范围内使用它,但是,如果您想避免它,则可以在全球范围内公开JSX
(React
)
答案 1 :(得分:7)
此导入声明:
import React, { Component } from 'react';
真的做了两件事。它以名称default
导入React
导出(这只是一个约定,你可以称之为你想要的)。它还会导入命名导出Component
。
导入默认React
的原因实际上是为了使JSX正常工作。当您的JSX代码被转换后,它会用<div>
替换React.DOM.div()
,所以React
必须存在,否则事情会中断!
单独导入两个内容意味着您的JSX可以正常工作,但您可以在代码中编写Component
而不是React.Component
。
当您执行import
任何from "react"
时,整个文件将以任一方式包含在内 - 任何减少包大小的尝试(例如死代码消除,树抖动)都是额外的,单独的步骤,它不依赖于您的import语句,而是您使用的代码部分。
对于这个库,理智的事情发生了:默认导出的子Component
引用与命名导出Component
相同的东西。
但是,请记住,事实并非如此!如果React库代码包含以下内容:
export default {
Component: "foo"
};
export const Component = "bar";
然后React.Component === "foo"
和Component === "bar"
。