React Rendering的视觉指南--道具
The Child component is wrapped in memo. Its props don’t change. Why does it still re-render when Parent renders?
子组件被包裹在memo 。它的道具并没有改变。为什么当Parent渲染的时候,它还是会重新渲染?

There are two types of values in javascript. Understanding the differences between them gives you Jedi powers in controlling component rendering.
在javascript中,有两种类型的值。了解它们之间的区别,就能在控制组件的渲染方面获得绝妙的权力。

This article is a second chapter of "A Visual Guide To React Rendering". If you haven't yet, check out the first chapter It always re-renders.
本文是《A Visual Guide To React Rendering》的第二章。如果你还没有,请查看第一章它总是在重新渲染。
Primitives
基本原理
The first type of value is primitive. Let’s try to pass a primitive value as a prop to the Child.
第一种类型的值是原始的。让我们试着把一个原始值作为一个道具传递给Child。

The Child is wrapped in memo. This means it will only re-render when its props change. The way memo determines if props changed is by shallow comparison prevProp === nextProp. Since "Alex" is a string, which is a primitive value, this comparison will return true, and the component won’t re-render. You can check it by yourself, paste this in your browser console "Alex" === "Alex".
Child被包裹在memo 。这意味着它只有在其道具发生变化时才会重新渲染。memo 判断道具是否改变的方法是通过浅层比较prevProp === nextProp 。由于"Alex" 是一个字符串,是一个原始值,这种比较将返回true ,并且组件不会重新渲染。你可以自己检查,把这个粘贴到你的浏览器控制台"Alex" === "Alex" 。
Non-primitives
非原住民
The second type of value is non-primitive. Here we pass the object as a prop. The object is a non-primitive value. So why does a non-primitive value makes the Child re-render?
第二种类型的值是非主观的。这里我们把对象作为一个道具来传递。该对象是一个非原始值。那么,为什么非原始值会使Child重新渲染?

Remember, to decide if the props changed, memo does the shallow comparison. When you compare two non-primitives like that {display: "flex"} === {display: "flex"}, the result will always be false. You can check it in your browser console.
记住,为了决定道具是否改变,memo 进行浅层比较。当你像这样比较两个非原语{display: "flex"} === {display: "flex"} ,结果将总是false 。你可以在你的浏览器控制台中检查。
In JavaScript, objects are a reference type. Two distinct objects are never equal, even if they have the same properties. Only comparing the same object reference wi...