2016-11-27 11 views
14

कहें कि मेरे पास एक रिएक्ट घटक है - गूंगा या नहीं - और मैं स्टोर से कुछ लेना चाहता हूं और इसे अपने चर को थोड़ा और अधिक बनाने के लिए एक चर में डाल देना चाहता हूं। क्या मुझे कॉन्स का उपयोग करना चाहिए या चलो? स्पष्ट रूप से राज्य बदल जाएगा।कॉन्स या रिएक्ट घटक

यहां एक उदाहरण है जिसके बारे में मैं बात कर रहा हूं। दोबारा, मैं जोर देना चाहता हूं कि मेरे वैल्यू बदल जाएंगे क्योंकि उपयोगकर्ता मेरे ऐप से इंटरैक्ट करता है।

class MyComponent extends Component { 

    render() { 

     // Here, should I use const or let? 
     const myValues = this.props.someData; 

     return(
      <div> 

      {myValues.map(item => (
        <SomeOtherComponent key={item.id} data={item} /> 
       ))} 

      </div> 
     ); 
    }; 
} 

function mapStateToProps(state) { 
    return { 
     someData: state.someValuesComingFromApi 
    } 
} 

export default connect(mapStateToProps)(MyComponent) 

उत्तर

12

const बनाम let "बदलते" एक कोड ब्लॉक में से कोई लेना देना ज्यादातर है।

const myValues = this.props.someData; 
if (*some condition*) { 
    myValues = []; 
} 

इस स्थिति आप करते हैं, क्योंकि आप मूल्य चर myValues करने के लिए सौंपा बदल रहे हैं का उपयोग करने की आवश्यकता होगी में:

let myValues = this.props.someData; 
if (*some condition*) { 
    myValues = []; 
} 

तो props.someData बदल रहा है यह ट्रिगर किया जाएगा यह केवल इस तरह की परिस्थितियों में मायने रखती है घटक का पुन: प्रस्तुत करना। तो कॉन्स बनाम खेलने के लिए नहीं आते हैं। संपूर्ण render विधि फिर से चलती है।

तो मैंने कहा, मैं उन स्थितियों में const का उपयोग करता हूं। जब तक आप सीधे एक चर के मूल्यवान तरीके से छेड़छाड़ नहीं कर रहे हैं, तो const का उपयोग करें।

1

मुझे ESLint नियम prefer-const का संदर्भ दें, इस मामले पर इसकी अच्छी व्याख्या है।

केवल एक चीज मैं जोड़ सकते हैं:

constसाथ सभी चर शुरू करने के लिए यदि आप सुनिश्चित नहीं हैं पसंद करते हैं

भले ही आप इसे बाद में उत्परिवर्तित, डिबगर में सूचित करेंगे

16

const एक संकेत है कि चर को पुन: असाइन नहीं किया जाएगा।

let एक संकेत है कि चर विचार को पुन: असाइन किया जा सकता है

अतिरिक्त चीज़ें है:

  • उपयोग const डिफ़ॉल्ट
  • उपयोग let केवल तभी rebinding की जरूरत है द्वारा
  • const वें इंगित नहीं करता है एक मूल्य पर 'स्थिर' या अपरिवर्तनीय है।

    const foo = {}; 
    foo.bar = 10; 
    console.log(foo.bar); // --> 10 
    

    केवल बाध्यकारी अपरिवर्तनीय है। यानी एक असाइनमेंट ऑपरेटर या एक एकल या पोस्टफ़िक्स का उपयोग कर - एक स्थिरांक चर पर या ++ ऑपरेटर एक लेखन त्रुटि अपवाद

  • ES6 const और let भी hoisted हैं फेंकता है। हालांकि पहचानकर्ताओं के पास संकलन समय से एक ही स्मृति संदर्भ है, लेकिन कोड में घोषणा से पहले उन्हें एक्सेस नहीं किया जा सकता है।(लेकिन जैसा कि हमने सोचा था कि घोषणा शारीरिक रूप से दायरे में शीर्ष पर चली जाएगी);)

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