उथले तुलना तब होती है जब तुलना की जाने वाली वस्तुओं के गुणों को "===" या सख्त समानता का उपयोग करके किया जाता है और गुणों में गहराई से तुलना नहीं करेगा। उदाहरण के लिए
function shallowCompare(newObj, prevObj){
for (key in newObj){
if(newObj[key] !== prevObj[key]) return true;
}
return false;
}
var game_item = {
game: "football",
first_world_cup: "1930",
teams: {
North_America: 1,
South_America: 4,
Europe: 8
}
}
var updated_game_item1 = {
game: "football",
first_world_cup: "1930",
teams: {
North_America: 1,
South_America: 4,
Europe: 8
}
}
shallowCompare(updated_game_item1, game_item);
यद्यपि दोनों वस्तुएं समान दिखाई देती हैं, game_item.teams
लेकिन यह एक ही संदर्भ नहीं है updated_game_item.teams
। 2 वस्तुओं के समान होने के लिए, उन्हें एक ही वस्तु की ओर इशारा करना चाहिए। इस प्रकार राज्य में इस परिणाम का मूल्यांकन किया जाना है
var updated_game_item2 = {
game: "football",
first_world_cup: "1930",
teams: game_item.teams
}
shallowCompare(updated_game_item2, game_item);
इस बार हर एक संपत्तियों की सख्त तुलना सही है क्योंकि नए और पुराने ऑब्जेक्ट में टीम की संपत्ति एक ही वस्तु की ओर इशारा करती है।
var updated_game_item3 = {
first_world_cup: 1930
}
shallowCompare(updated_game_item3, game_item);
updated_game_item3.first_world_cup
संपत्ति में विफल रहता है 1930 के रूप में सख्त मूल्यांकन एक संख्या है, जबकि game_item.first_world_cup
एक श्रृंखला है। अगर तुलना ढीली होती (==) तो यह बीत चुका होता। बहरहाल, यह भी राज्य अद्यतन में परिणाम होगा।
अतिरिक्त नोट्स:
- गहरी तुलना करना व्यर्थ है क्योंकि यह प्रदर्शन को काफी प्रभावित करेगा यदि राज्य वस्तु का गहरा घोंसला है। लेकिन अगर इसका बहुत नेस्टेड नहीं है और आपको अभी भी एक गहरी तुलना की आवश्यकता है, तो इसे shouldComponentUpdate में लागू करें और देखें कि क्या ठीक है।
- आप निश्चित रूप से सीधे स्टेट ऑब्जेक्ट को म्यूट कर सकते हैं लेकिन घटकों की स्थिति प्रभावित नहीं होगी, क्योंकि इसके सेटस्टैट विधि प्रवाह में जो घटक अद्यतन चक्र हुक को लागू करता है। यदि आप घटक जीवन-चक्र हुक से जानबूझकर बचने के लिए राज्य वस्तु को सीधे अपडेट करते हैं, तो संभवतः आपको डेटा को संग्रहीत करने के लिए एक साधारण चर या वस्तु का उपयोग करना चाहिए न कि राज्य वस्तु का।