2017-01-20 13 views
22

कहें, हम ES6 के साथ प्रतिक्रिया का उपयोग कर रहे हैं। हम प्रतिक्रिया और घटक आयात करते हैंआयात के बीच अंतर प्रतिक्रिया और आयात {घटक} वाक्यविन्यास

import React from 'react' 
import { Component } from 'react' 

वाक्यविन्यास अंतर क्यों? क्या हम नीचे निर्दिष्ट के रूप में उपयोग नहीं कर सकते?

import Component from 'react' 
+0

भी की [मैं ES6 आयात के लिए घुंघराले ब्रेसिज़ उपयोग कब करना चाहिए?] (Http://stackoverflow.com/q/36795819/218196) –

+1

जिससे आप आयात कर रहे हैं पुस्तकालय प्रतिक्रिया आप आयात करना होगा डुप्लिकेट इस 'की तरह प्रतिक्रिया आयात 'प्रतिक्रिया' से प्रतिक्रिया क्योंकि प्रतिक्रिया एक डिफ़ॉल्ट निर्यात है। दूसरी ओर, घटक घुंघराले ब्रेसिज़ में रखा जाता है क्योंकि यह एक वैकल्पिक है। लाइब्रेरी से वैकल्पिक आयात ब्रेसिज़ में रखे जाते हैं –

उत्तर

37

यहाँ import के लिए docs हैं।

import React from 'react' 

उपरोक्त एक डिफ़ॉल्ट आयात है। डिफ़ॉल्ट आयात export default ... के साथ निर्यात किए जाते हैं। केवल एक ही डिफ़ॉल्ट निर्यात हो सकता है।

import { Component } from 'react' 

लेकिन यह एक सदस्य आयात (नाम आयात) है। सदस्य आयात export ... के साथ निर्यात किए जाते हैं। कई सदस्य निर्यात हो सकते हैं।

आप इस वाक्य रचना का उपयोग करके दोनों आयात कर सकते हैं:

import React, { Component } from 'react'; 

जावास्क्रिप्ट में डिफ़ॉल्ट और नामित आयात विभाजित हैं, ताकि आप एक नामित आयात आयात नहीं कर सकते जैसे कि यह डिफ़ॉल्ट था। निम्नलिखित, ('react' पैकेज के डिफ़ॉल्ट निर्यात जो होने के लिए एक ही React.Component के रूप में नहीं जा रहा है के लिए नाम Component सेट:।

import Component from 'react'; 
+0

"आयात घटक से प्रतिक्रिया"; "क्या आप" घटक "को 'प्रतिक्रिया' के डिफ़ॉल्ट निर्यात को कॉल करने के लिए नहीं जा रहे हैं? दूसरे शब्दों में, घटक प्रतिक्रिया वस्तु है, जिसे डिफ़ॉल्ट रूप से 'प्रतिक्रिया' मॉड्यूल से निर्यात किया जाता है, शून्य नहीं। मेरा मतलब है, डिफ़ॉल्ट निर्यात एक नामित निर्यात नहीं है, इसलिए नाम कोई फर्क नहीं पड़ता। – Josmar

+1

@ जोसमार हां, मैं देखता हूं कि मैंने इसे बहुत अच्छी तरह से व्यक्त नहीं किया। एक संपादन किया :) –

+0

आप यह उल्लेख करना भूल गए कि रिएक्ट में डिफ़ॉल्ट निर्यात नहीं है, इसलिए जब तक आप हैकिंग बेबेल प्रीसेट का उपयोग नहीं करते हैं तब तक कोड काम नहीं करेगा ... –

0

घटक एक नामित निर्यात है जैसे इसलिए, यह साथ destructured किया जाना चाहिए {} ।

प्रतिक्रिया से 'प्रतिक्रिया' प्रतिक्रिया के लिए एक डिफ़ॉल्ट निर्यात कर रहा है सही है। उदाहरण के लिए निर्यात डिफ़ॉल्ट प्रतिक्रिया

+1

स्पष्ट करने के लिए, आयात को नष्ट करने जैसी कोई चीज़ नहीं है। Syntactically यह समान है, लेकिन कुछ दिलचस्प मतभेद हैं। केंट सी डोड्स [एक दिलचस्प पोस्ट लिखा] [https://medium.com/@kentcdodds/misunderstanding-es6-modules-upgrading-babel-tears-and-a-solution-ad2d5ab93ce0) इस पर –

0

किसी भी फाइल में आप की तरह "निर्यात डिफ़ॉल्ट प्रतिक्रिया" बयान के साथ डिफ़ॉल्ट रूप से कुछ निर्यात कर रहे हैं, तो वह हो सकता है "आयात प्रतिक्रिया" की तरह आयात किया गया।

अन्य निर्यात जो डिफ़ॉल्ट नहीं हैं, हमें यह निर्दिष्ट करना होगा कि हम वास्तव में "आयात {घटक}" जैसे कोष्ठक में बंद करके आयात करना चाहते हैं।

संबंधित मुद्दे