Mon problème est que la comparaison approfondie de lodash entre l'égalité et l'égalité stricte de === renvoie des valeurs différentes lors de la comparaison des champs de nextProps et self.props dans la méthode de cycle de vie de componentWillReceiveProps.
Voici mon exemple spécifique -
componentWillReceiveProps(nextProps){
(nextProps.obj === self.props.obj); // false
_.isEqual(nextProps.obj, self.props.obj); // true
typeof(nextProps.obj); // object
typeof(self.props.obj); // object
nextProps.obj; // { k1: "v1", k2: "v2", k3: "v3" }
self.props.obj; // { k1: "v1", k2: "v2", k3: "v3" }
}
Est-ce que quelqu'un sait ce qui pourrait se passer?
_. isEquals :
Effectue une comparaison approfondie entre deux valeurs pour déterminer si elles sont équivalentes. il retournera vrai si les valeurs sont équivalentes, sinon faux.
Exemple:
var object = { 'a': 1 };
var other = { 'a': 1 };
console.log(_.isEqual(object, other));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
=== :
Pour une égalité stricte, les objets comparés doivent avoir le même type et:
comparé doit avoir le même type et:
- Deux chaînes sont strictement égales lorsqu'elles ont la même séquence de caractères, la même longueur et les mêmes caractères aux positions correspondantes.
- Deux nombres sont strictement égaux lorsqu'ils sont numériquement égaux (ont la même valeur numérique). NaN n'est égal à rien, y compris NaN. Les zéros positifs et négatifs sont égaux entre eux.
- Deux opérandes booléens sont strictement égaux si les deux sont vrais ou les deux sont faux.
- Deux objets sont strictement égaux s'ils se réfèrent au même objet
Opérateurs de comparaison - MDC
Exemple:
var object = { 'a': 1 };
var other = { 'a': 1 };
console.log(object === other);
// => false
En javascript, lorsque vous utilisez '===' pour comparer des objets, il ne retournera vrai que si c'est le même objet tandis que _.isEqual retournera vrai si l'objet est équivalent.
En référence à votre question réelle, je pense que vous devriez utiliser _.isEqual pour comparer 2 objets pour voir s'ils sont la copie exacte l'un de l'autre.
Pour plus de détails, voir: https://lodash.com/docs#isEqual