2017-12-05 10 views
6

आधिकारिक React documentation पढ़ चुके सिफारिश की है मैं PureComponent के बारे में this में आए है:क्यों प्रतिक्रिया के PureComponent, अपने सभी बच्चों को "शुद्ध" के लिए

इसके अलावा, React.PureComponent के shouldComponentUpdate() प्रोप छोड़ देता है पूरे घटक subtree के लिए अद्यतन। सुनिश्चित करें कि सभी बच्चे घटक भी "शुद्ध" हैं।

पूरे उपट्री के लिए प्रोप अपडेट को छोड़ने का मतलब क्यों है शुद्ध शुद्ध घटकों से परहेज करना? PureComponent के घटक सबट्री के अंदर एक गैर-शुद्ध घटक के परिणाम क्या होंगे (सामान्य रूप से और मामले में जब इसे प्रोप बदलने के लिए डिज़ाइन नहीं किया गया/माना जाता है)।

उत्तर

2

इनपुट प्रोप के उसी सेट के लिए एक शुद्ध घटक बिल्कुल न केवल अपने लिए बल्कि पूरे डोम पेड़ के लिए एक ही परिणाम देगा। जब आप PureComponent घोषित करते हैं, न केवल आपको प्रोप और state, लेकिन context के बारे में सोचने की आवश्यकता होती है। PureComponents किसी संदर्भ संदर्भ को अवरुद्ध करें। एक उदाहरण

<MyApp>  
<Router> // react-router. 
    <App> // A PureComponent 
    <Switch> // react-router Switch 
    <Route ....> 
    </Switch> 
    </App> 
</Router> 
</MyApp> 

पर विचार करें प्रतिक्रिया रूटर संदर्भ से रूटर रंगमंच की सामग्री में के वर्तमान स्थान रूटर स्टोर करेगा। और रिएक्ट-राउटर स्विच इसे वापस पढ़ेगा और रूट का चयन करेगा। लेकिन App एक बहुत ही शुद्ध घटक है, और राउटर में context में प्रतिक्रिया नहीं करेगा, क्योंकि यह not using उन मानों को अनदेखा करता है और उन्हें अनदेखा करना चाहिए। और इसलिए जब आपके पास एक शुद्ध कॉम्पोनेंट होता है, तो आपको न केवल घटक बल्कि इसके घोंसले वाले बच्चों के बारे में भी सोचना चाहिए। तो अनिवार्य रूप से आप अपने सभी बच्चों को भी शुद्ध रखेंगे।

+0

उत्तर देने के लिए धन्यवाद। इस मामले के बारे में क्या है जब बच्चों के पेड़ में घटक प्रोप में परिवर्तन करने के लिए (डिजाइन द्वारा) नहीं माना जाता है? या यह है कि आप अपनी पहली वाक्य में क्या कहने की कोशिश कर रहे थे? – ilans

+1

तो सामान्य रूप से, यदि subComponents संदर्भ पर निर्भर नहीं हैं, तो इससे कोई फर्क नहीं पड़ता कि वे PureComponent हैं या नहीं, क्योंकि उनके माता-पिता स्वयं पुनः प्रस्तुत नहीं करेंगे। यह केवल तभी होता है जब माता-पिता एक शुद्ध कॉम्पोनेंट है, तो बच्चों को भी उदाहरण के अनुसार चित्रित किया जाना चाहिए –

0

प्रत्येक प्रोप अपरिवर्तनीय होना चाहिए। इसे आसान डीबग करने की जरूरत है। उदाहरण के लिए । आप प्रोप के माध्यम से उपयोगकर्ताओं की सरणी डाल दिया। लेकिन, घटकों में से एक है: user.name = value। बच्चे के घटक बहुत अधिक हो सकते हैं, और आपको समझना मुश्किल होगा, उपयोगकर्ता घटक क्या अपडेट करता है?

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