Не получится ли это неожиданным образом?
Возможно, и это почти наверняка будет медленнее, чем глубокий обход объекта для определения равенства (поскольку JSON.stringify
должен выполнитьглубокий обход объекта в любом случае ).
Один из способов, которым он может потерпеть неудачу, состоит в том, что JSON.stringify
может возвращать разные строки для эквивалентных объектов (и это определенное поведение):
const o1 = {a: 1, b: 2};
const o2 = {b: 2, a: 1};
const str1 = JSON.stringify(o1);
const str2 = JSON.stringify(o2);
console.log(str1);
console.log(str2);
console.log(str1 === str2);
... хотя я допускаю, что это маловероятно (по крайней мере) в случае реквизита и состояния в вашем компоненте React.(Это происходит, когда свойства нецелого индекса на объектах создаются в другом порядке. Вероятно, этого не произойдет с вашими реквизитами верхнего уровня или свойствами состояния, а как быть с подчиненными объектами? this.setState({foo});
где foo
- это объект, созданный по-разному в разное время ...)