Reactjs 导入*与从';反应';vs导入从';反应';

Reactjs 导入*与从';反应';vs导入从';反应';,reactjs,Reactjs,我是新的反应或编码背景一般。我不确定这两种说法之间有什么区别 import * as react from 'react' 及 提前谢谢 最常用的进口有三种 类型1 import * as A from 'abc'; 这将导入abc中标记为导出的所有内容。您可以使用下面的代码访问它们 A.Component 类型2 import {A} from 'abc'; 这将从abc导入,包含如下内容: export const A = () => {}; const B = () =&

我是新的反应或编码背景一般。我不确定这两种说法之间有什么区别

import * as react from 'react'


提前谢谢

最常用的进口有三种

类型1

import * as A from 'abc';
这将导入abc中标记为导出的所有内容。您可以使用下面的代码访问它们

A.Component 
类型2

import {A} from 'abc';
这将从abc导入,包含如下内容:

export const A = () => {};
const B = () => {}; // The name "B" is not exported, only the value.

export default B;  // at the end of component
类型3

import A from 'abc';
这将从abc作为A导入默认导出。导出可以如下所示:

export const A = () => {};
const B = () => {}; // The name "B" is not exported, only the value.

export default B;  // at the end of component

模式
import*作为React from'React
与在React like Flow或Typescript中使用类型系统有关。使用从“React”导入React导致导入类型定义时出现问题。目前,在Typescript中,您可以使用
allowSyntheticDefaultImports
标志,该标志解决了此问题并导入所有类型,即使您使用
import React from'React'

通常,对于ES2015(ES6)模块

是名称空间导入,指示所有导出的对象都将放置在名称空间中。然后,您可以执行以下操作:

name.blabla1
name.blabla2
etc ...
命名空间不可调用。所以你不能这样做:

name();
而:

import name from 'module';
是默认导入,相当于:

import {default as name} from 'module';
const name = require('module');
您仅从模块导入默认对象

在React的情况下,混淆可能是因为React的默认导出是。。。React(出于互操作性原因,Babel添加了默认导出)。严格来说,要使用的语法是:

import * as React from 'react';

以下工作只是因为巴贝尔的转换(不是100%确定):

对于使用TypeScript的用户,在版本2.7之前,默认情况是:

import * as name from 'module';
等同于:

import {default as name} from 'module';
const name = require('module');
以及:

等同于:

const name = require('module').default;

从2.7版开始,如果您的编译器设置将“esModuleInterop”指定为true(建议使用),则可以使用ES2015语法行为。

感谢您的澄清!谢谢类型3我不清楚。I
import
A
但是我不是通过声明
const A=..
来覆盖它吗?
组件中的
export
语句是导入
A
还是最初导入
A
?另外,在类型2中,
A
是否需要是一个函数(
()=>{…}
或者它也可以是一个对象
export const A={}
?对象。对于此从“abc”导入A,导入语法导出类似此导出默认值A;或者只需使用已解决此问题的create_react_应用程序,让我们从“react”导入react
,即使使用typescript。
const name = require('module').default;