import React, { Component, PropTypes } from 'react';
Điều này nói:
Nhập tệp xuất mặc định từ'react'
dưới tên React
và nhập các bản xuất được đặt tênComponent
và PropTypes
dưới cùng tên.
Điều này kết hợp hai cú pháp phổ biến mà bạn có thể đã thấy
import React from 'react';
import { Component, PropTypes } from 'react';
Đầu tiên được sử dụng để nhập và đặt tên cho xuất mặc định, thứ hai để nhập các xuất được đặt tên đã chỉ định.
Theo nguyên tắc chung, hầu hết các mô-đun sẽ cung cấp một bản xuất mặc định, hoặc một danh sách các bản xuất được đặt tên. Một mô-đun có thể cung cấp cả một bản xuất mặc định thì hơi ít bình thường hơn và được đặt tên . Tuy nhiên, trong trường hợp có một đối tượng địa lý được nhập phổ biến nhất, nhưng cũng có các tính năng phụ bổ sung, thì đó là thiết kế hợp lệ để xuất tính năng đầu tiên làm mặc định và các tính năng còn lại được đặt tên là xuất khẩu. Trong những trường hợp như vậy, bạn sẽ sử dụng import
cú pháp mà bạn tham khảo.
Các câu trả lời khác nằm ở đâu đó giữa sai và khó hiểu, có thể vì các tài liệu MDN tại thời điểm câu hỏi này được hỏi là sai và khó hiểu. MDN đưa ra ví dụ
import name from "module-name";
và được cho name
là "tên của đối tượng sẽ nhận các giá trị đã nhập." Nhưng điều đó gây hiểu lầm và không chính xác; trước hết, chỉ có một giá trị nhập, giá trị này sẽ được "nhận" (tại sao không chỉ nói "được gán cho" hoặc "được sử dụng để tham chiếu đến")name
và giá trị nhập trong trường hợp này là xuất mặc định từ mô-đun .
Một cách khác để giải thích điều này là lưu ý rằng việc nhập khẩu ở trên hoàn toàn giống với
import { default as name } from "module-name";
và ví dụ của OP hoàn toàn giống với
import { default as React, Component, PropTypes } from 'react';
Tài liệu MDN tiếp tục cho thấy ví dụ
import MyModule, {foo, bar} from "my-module.js";
và tuyên bố rằng nó có nghĩa là
Nhập toàn bộ nội dung của mô-đun, với một số cũng được đặt tên rõ ràng. Điều này chèn myModule
(sic) foo
, và bar
vào phạm vi hiện tại. Lưu ý rằng foo
và myModule.foo
giống nhau, như là bar
vàmyModule.bar
Những gì MDN nói ở đây và những câu trả lời khác khẳng định dựa trên tài liệu MDN không chính xác, là hoàn toàn sai và có thể dựa trên phiên bản trước của thông số kỹ thuật. Điều này thực sự làm là
Nhập xuất mô-đun mặc định và một số xuất khẩu được đặt tên rõ ràng. Chèn này MyModule
, foo
và bar
vào phạm vi hiện tại. Tên xuất khẩu foo
và bar
là không thể truy cập quaMyModule
, đó là mặc định xuất khẩu, không phải một số ô bao gồm tất cả xuất khẩu.
(Xuất mô-đun mặc định là giá trị được xuất với export default
cú pháp, cũng có thể là export {foo as default}
.)
Người viết tài liệu MDN có thể đã nhầm lẫn với biểu mẫu sau:
import * as MyModule from 'my-module';
Nhập khẩu này, tất cả xuất khẩu từ my-module
, và làm cho họ tiếp cận dưới những cái tên như MyModule.name
. Xuất mặc định cũng có thể truy cập được MyModule.default
vì xuất mặc định thực sự không hơn gì một xuất có tên khác có tên default
. Trong cú pháp này, không có cách nào để chỉ nhập một tập hợp con của các xuất đã đặt tên, mặc dù người ta có thể nhập xuất mặc định, nếu có, cùng với tất cả các xuất được đặt tên, với
import myModuleDefault, * as myModule from 'my-module';