javascript क्यों `एक्सपोर्ट डिफॉल्ट कॉन्सट 'अमान्य है?




scope export (5)

पॉल द्वारा साझा किया गया उत्तर सबसे अच्छा है। अधिक विस्तार करने के लिए,

प्रति फ़ाइल केवल एक डिफ़ॉल्ट निर्यात हो सकता है। जबकि एक से अधिक कब्जे वाले निर्यात हो सकते हैं। डिफ़ॉल्ट चर को किसी भी नाम से आयात किया जा सकता है, जबकि कॉन्स्ट चर को किसी भी नाम से आयात किया जा सकता है।

var message2 = 'मुझे निर्यात किया गया है';

डिफ़ॉल्ट संदेश निर्यात करें 2;

निर्यात कांस्ट मैसेज = 'मैं भी निर्यात किया जाता हूं'

आयात पक्ष में हमें इसे इस तरह आयात करना होगा:

'{./est' से आयात {संदेश};

या

आयात संदेश './test' से;

पहले आयात के साथ, कास्ट चर आयात किया जाता है, जबकि दूसरे के साथ, डिफ़ॉल्ट एक आयात किया जाएगा।

मैं देखता हूं कि निम्नलिखित ठीक है:

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

हालाँकि, यह गलत है:

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

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

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

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


const let की तरह है, यह एक लेसिकल डिक्लेरेशन ( वैरिएबलस्टैटेमेंट , डिक्लेरेशन ) है जिसका उपयोग आपके ब्लॉक में एक पहचानकर्ता को परिभाषित करने के लिए किया जाता है।

आप इसे default कीवर्ड के साथ मिलाने का प्रयास कर रहे हैं, जो इसे पालन करने के लिए एक HoistableDeclaration, ClassDeclaration या AssignmentExpression की अपेक्षा करता है।

इसलिए यह एक SyntaxError है

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

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

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

निम्नलिखित ठीक export default Tab;

Tab एक AssignmentExpression बन जाता है क्योंकि इसे डिफ़ॉल्ट नाम दिया गया है ?

export default Tab = connect( mapState, mapDispatch )( Tabs ); ठीक है

यहां Tab = connect( mapState, mapDispatch )( Tabs ); एक असाइनमेंटExpression है


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

यहां मेरे एक मार्ग से एक छीन लिया गया उदाहरण है, जिसमें दिखाया गया है कि आप अपने घटक को कैसे परिभाषित कर सकते हैं और इसे एकल विवरण के साथ डिफ़ॉल्ट रूप से निर्यात कर सकते हैं:

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 ) तुलना में बहुत साफ- connect( mapState, mapDispatch )( BareComponent )


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

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>);

मेरे लिए यह टाइपस्क्रिप्ट के कई idiosyncracies (आईडीओ (टी) पर जोर) में से एक है जो लोगों को अपने बालों को बाहर निकालने और डेवलपर्स को शाप देने का कारण बनता है। शायद वे अधिक समझने योग्य त्रुटि संदेशों के साथ आने पर काम कर सकते थे।





default