yüzeysel karşılaştırma, karşılaştırılan nesnelerin özelliklerinin "===" veya katı eşitlik kullanılarak yapıldığı ve özelliklerle ilgili daha derin karşılaştırmalar yapmayacağı zamandır. örneğin
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);
Her iki nesne de aynı görünse de, game_item.teams
aynı referans değildirupdated_game_item.teams
. 2 nesnenin aynı olması için aynı nesneyi göstermeleri gerekir. Böylece bu, değerlendirilen durumun güncellenmesine neden olur
var updated_game_item2 = {
game: "football",
first_world_cup: "1930",
teams: game_item.teams
}
shallowCompare(updated_game_item2, game_item);
Bu kez, yeni ve eski nesnedeki takımlar özelliği aynı nesneyi işaret ettiğinden, özelliklerin her biri katı karşılaştırma için true değerini döndürür.
var updated_game_item3 = {
first_world_cup: 1930
}
shallowCompare(updated_game_item3, game_item);
updated_game_item3.first_world_cup
Mülkiyet iken 1930 kadar katı değerlendirme bir sayıdır başarısız game_item.first_world_cup
bir dizedir. Karşılaştırma gevşek olsaydı (==) bu geçebilirdi. Bununla birlikte, bu durum aynı zamanda durum güncellemesine de neden olacaktır.
Ek Notlar:
- Durum nesnesi derinlemesine iç içe geçmişse performansı önemli ölçüde etkileyeceğinden derin karşılaştırma yapmak anlamsızdır. Ancak çok iç içe değilse ve yine de derin bir karşılaştırmaya ihtiyacınız varsa, bunu shouldComponentUpdate'e uygulayın ve bunun yeterli olup olmadığını kontrol edin.
- Durum nesnesini kesinlikle doğrudan değiştirebilirsiniz, ancak bileşenlerin durumu etkilenmeyecektir, çünkü tepki veren setState yöntemi akışında bileşen güncelleme döngüsü kancalarını uygular. Durum nesnesini, bileşen yaşam döngüsü kancalarından kasıtlı olarak kaçınmak için doğrudan güncellerseniz, muhtemelen verileri depolamak için durum nesnesini değil, basit bir değişken veya nesne kullanmalısınız.