2016-03-28 13 views
103

मुझे लगता है कि निम्नलिखित ठीक है:`निर्यात डिफ़ॉल्ट कॉन्स` अवैध क्यों है?

const Tab = connect(mapState, mapDispatch)(Tabs); 
export default Tab; 

बहरहाल, यह गलत है:

export default const Tab = connect(mapState, mapDispatch)(Tabs); 

फिर भी यह ठीक है:

export default Tab = connect(mapState, mapDispatch)(Tabs); 

इस कृपया विस्तार से बताया जा सकता है क्यों const है export default के साथ अमान्य? क्या यह एक अनावश्यक जोड़ है & export default के रूप में घोषित कुछ भी const या ऐसा माना जाता है?

उत्तर

120

constlet की तरह, it is a LexicalDeclaration (VariableStatement, घोषणा) अपने ब्लॉक में एक पहचानकर्ता परिभाषित किया जाता है।

आप इसे अनुसरण करने के लिए default कीवर्ड, which expects a HoistableDeclaration, ClassDeclaration or AssignmentExpression के साथ मिश्रण करने का प्रयास कर रहे हैं।

इसलिए यह सिंटेक्स त्रुटि है।


आप const कुछ करना चाहते हैं तो आप पहचानकर्ता प्रदान करने के लिए और default का उपयोग नहीं की जरूरत है।

export अपने आप में एक VariableStatement या घोषणा यह सही है को स्वीकार करता है।


AFAIK अपने आप में निर्यात को अपने वर्तमान दायरे में कुछ भी नहीं जोड़ना चाहिए।


निम्नलिखित export default Tab;

Tab के रूप में यह नाम डिफ़ॉल्टदिया है एक AssignmentExpression हो जाता है ठीक है?

export default Tab = connect(mapState, mapDispatch)(Tabs);

यहाँ Tab = connect(mapState, mapDispatch)(Tabs); एक AssignmentExpression है ठीक है।

+4

उत्तर की तुलना में यह बहुत साफ दिख रहा है इसका उत्तर यह है कि यह एक त्रुटि कैसे बनता है। प्रश्न अभी भी क्यों है? एक कारण यह है कि यह इस तरह से कॉन्स्ट के दुरुपयोग को रोकता है: निर्यात डिफ़ॉल्ट एक = 1, बी = 3, सी = 4 निर्यात; –

+1

'" AFAIK अपने आप में निर्यात को अपने वर्तमान दायरे में कुछ भी नहीं जोड़ना चाहिए "' यह इतना सटीक नहीं है, क्योंकि 'निर्यात एक = 1' आपके वर्तमान संदर्भ में' ए 'जोड़ता है। और कक्षाओं के मामले में 'निर्यात डिफ़ॉल्ट' के साथ भी, क्योंकि 'निर्यात डिफ़ॉल्ट वर्ग MyClass {}' आपके वर्तमान संदर्भ में 'MyClass' भी जोड़ता है। – Ernesto

+1

@ सेर्गेयो ऑरलोव इस बात से सहमत हैं कि यह बताता है कि यह एक त्रुटि कैसे उत्पन्न करता है, लेकिन यह आवश्यक क्यों है कि थोड़ा हल्का शेड करता है। हालांकि मुझे यकीन नहीं है कि यह एकमात्र कारण है, आपको शायद इसे एक अलग उत्तर के रूप में पोस्ट करना चाहिए, इस पर कोई टिप्पणी नहीं। – Herick

18

तुम भी

const MyComponent = ({ attr1, attr2 }) => (<p>Now Export On other Line</p>); 
export default MyComponent 

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

let MyComponent; 
export default MyComponent = ({ }) => (<p>Now Export On SameLine</p>); 
+2

'const MyComponent;' मान्य वाक्यविन्यास नहीं है - एक 'const' को उसी कथन में असाइन किया जाना चाहिए जिसे परिभाषित किया गया है। – configurator

+1

मुझे खेद है कि मैंने बुरा किया, मैंने उस चीज़ को सही किया। –

3

पॉल का जवाब वह है जिसे आप ढूंढ रहे हैं।हालांकि, एक व्यावहारिक मामले के रूप में, मुझे लगता है कि आप उस पैटर्न में दिलचस्पी ले सकते हैं जिसका उपयोग मैं अपने स्वयं के प्रतिक्रिया + रेडक्स ऐप्स में कर रहा हूं।

import React from 'react'; 
import { connect } from 'react-redux'; 

@connect((state, props) => ({ 
    appVersion: state.appVersion 
    // other scene props, calculated from app state & route props 
})) 
export default class SceneName extends React.Component { /* ... */ } 

(नोट:: मैं शब्द "दृश्य" का उपयोग

यहाँ मेरी मार्गों में से एक, दिखा आप अपने घटक कैसे परिभाषित और डिफ़ॉल्ट रूप में निर्यात एक भी बयान के साथ कर सकते हैं से एक छीन नीचे उदाहरण दिया गया है किसी भी मार्ग के शीर्ष-स्तर घटक के लिए)।

मुझे आशा है कि यह सहायक होगा। मुझे लगता है कि पारंपरिक connect(mapState, mapDispatch)(BareComponent)

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