sách gpt4 ai đã đi

import * as React từ 'react'; so với import React từ 'react';

In lại Tác giả: Data Little Sun Thời gian cập nhật: 2023-10-29 03:50:19 32 4
mua khóa gpt4 Nike

Tôi đã nhận thấy Phản ứng Bạn có thể nhập nó như thế này:

import * as React từ 'react';

...hoặc như thế này:

import React từ 'react';

Nhập khẩu đầu tiên phản ứng Mọi thứ trong mô-đun (xem:Nhập toàn bộ nội dung của mô-đun)

Cái thứ hai chỉ nhập khẩu mặc định Xuất mô-đun (xem:Nhập mặc định)


Hai cách tiếp cận này có vẻ khác nhau và hoàn toàn không tương thích.

Tại sao cả hai đều hiệu quả?


Vui lòng trích dẫn mã nguồn và giải thích cơ chế... Tôi muốn hiểu cách thức hoạt động của nó.


làm mới

cái nàyKHÔNG Sự khác biệt giữa import * as react from 'react' và import react from 'react' là gì? Một bản sao của

Câu hỏi này được trả lời bằng thông tin chung về mô-đun ES6.

Tôi đang hỏi về phản ứng Đây là cách hoạt động của các mô-đun. Điều này có vẻ liên quan đến cơ chế xuất khẩu "hacky"trong nguồn ở đâyTuy nhiên, vẫn chưa rõ ràng làm thế nào toàn bộ Các mô-đun và mặc định Xuất khẩu sang Phản ứng và cả hai phương pháp đều hoạt động với JSX đã biên dịch, v.v.

1 Câu trả lời

Tóm lại là

Trên thực tế, câu lệnh nhập ES nhập khẩu mặc địnhnhập khẩu * Chúng không phải là một thứ và thực tế là chúng hoạt động giống nhau trong trường hợp này là sự kết hợp giữa cách tác giả React chọn để cung cấp thư viện và lớp tương thích trong TypeScript (sử dụng esModuleInterop) hoặc Babel và trình đóng gói của bạn để chúng "hoạt động bình thường". Theo đặc tả ES6, nó có thểKhông nênhoạt động, nhưng ngày nay chúng ta vẫn làm việc trong thời đại mà các mô-đun JS rất lộn xộn, do đó các công cụ như Babel, TypeScript, Webpack, v.v. cố gắng chuẩn hóa hành vi.

Chi tiết hơn:

React không phải là thư viện ES6. Nếu bạn nhìnmã nguồnBạn là index.js Xem nội dung này trong:

const React = yêu cầu('./src/React');

// TODO: quyết định biểu mẫu xuất cấp cao nhất.
// Cách này khá khó nhưng có thể áp dụng được với cả Rollup và Jest.
module.exports = React.default || React;

(Lưu ý các bình luận, ngay cả trong mã nguồn React, nơi chúng xung đột với khả năng tương thích xuất mặc định của ES6.)

module.exports = Cú pháp là CommonJS (NodeJS). Trình duyệt sẽ không hiểu được điều này. Đó là lý do tại sao chúng tôi sử dụng các bundler như Webpack, Rollup hoặc Parcel. Họ hiểu nhiều cú pháp mô-đun khác nhau và tạo ra các gói có thể chạy trên trình duyệt.

Nhưng mặc dù React không phải là thư viện ES, cả TypeScript và Babel đều cho phép bạn nhập nó như thể nó là một thư viện ES (sử dụng nhập khẩu cú pháp, thay vì yêu cầu(), v.v.), nhưng có những khác biệt giữa CJS và ES cần phải được giải quyết. Một trong số đó là xuất khẩu = Có thể Cung cấp cho bạn những thứ mà ES không có cách nhập tuân thủ theo thông số kỹ thuật, như hàm hoặc lớp dưới dạng mô-đun. Để giải quyết những vấn đề không tương thích này, Babel tạm thời cho phép bạn nhập các mô-đun CJS như thể chúng đã xuất một thứ gì đó theo mặc định.hoặcNhập dưới dạng không gian tên. TypeScript đã không làm điều này trong một thời gian, nhưng gần đây đã thêm nó như esModuleInterop Một tùy chọn trong . Vì vậy, hiện tại cả Babel và TypeScript đều khá nhất quán khi cho phép nhập các mô-đun CJS bằng cách sử dụng lệnh nhập ES mặc định hoặc lệnh nhập ES có không gian tên.

Đối với TypeScript, điều này còn phụ thuộc vào cách định nghĩa kiểu của thư viện thực sự được xác định. Tôi sẽ không đi vào chi tiết của việc này, nhưng bạn có thể tưởng tượng ra một tình huống mà một mặt hàng nhập khẩu cụ thểKhi chạy bạn có thểnhưng TypeScript không thể biên dịch mà không có lỗi.

Một điều nữa đáng đề cập là nếu bạn nhìn vào mã xây dựng React, bạn sẽ thấy một Mô-đun UMD. phiên bản và phiên bản CJS. Phiên bản UMD chứa một số mã thời gian chạy thô để có thể hoạt động trong mọi môi trường mô-đun (bao gồm cả trình duyệt). Nó chủ yếu hữu ích nếu bạn chỉ muốn đưa React vào thời gian chạy (tức là bạn không sử dụng bundler). Ví dụ .

Có khó hiểu không? Vâng, tôi nghĩ vậy. :)

Liên quan đến javascript - from 'react' import * as React; so với from 'react' import React;, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/55285737/

32 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com