Perbandingan dangkal adalah ketika properti dari objek yang dibandingkan dilakukan menggunakan "===" atau persamaan yang ketat dan tidak akan melakukan perbandingan lebih dalam ke properti. untuk mis
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);
Meskipun kedua objek tampak sama, game_item.teams
referensi ini tidak sama dengan updated_game_item.teams
. Agar 2 objek menjadi sama, mereka harus menunjuk ke objek yang sama. Dengan demikian ini menghasilkan status yang sedang dievaluasi untuk diperbarui
var updated_game_item2 = {
game: "football",
first_world_cup: "1930",
teams: game_item.teams
}
shallowCompare(updated_game_item2, game_item);
Kali ini setiap properti mengembalikan nilai true untuk perbandingan yang ketat karena properti tim di objek baru dan lama mengarah ke objek yang sama.
var updated_game_item3 = {
first_world_cup: 1930
}
shallowCompare(updated_game_item3, game_item);
The updated_game_item3.first_world_cup
properti gagal evaluasi yang ketat seperti 1930 adalah angka sementara game_item.first_world_cup
adalah string. Jika perbandingannya longgar (==) ini akan berlalu. Meskipun demikian ini juga akan menghasilkan pembaruan status.
Catatan tambahan:
- Melakukan perbandingan mendalam tidak ada gunanya karena akan memengaruhi performa secara signifikan jika objek status sangat bertingkat. Tetapi jika tidak terlalu bersarang dan Anda masih membutuhkan perbandingan yang mendalam, terapkan di shouldComponentUpdate dan periksa apakah itu sudah cukup.
- Anda pasti dapat mengubah objek status secara langsung tetapi status komponen tidak akan terpengaruh, karena dalam aliran metode setState yang bereaksi mengimplementasikan kait siklus pembaruan komponen. Jika Anda memperbarui objek status secara langsung untuk sengaja menghindari kait siklus-hidup komponen, maka mungkin Anda harus menggunakan variabel atau objek sederhana untuk menyimpan data dan bukan objek status.