如以下代码所示:
1、b是对a的引用,两者都是指向同一个地址,所以首先输出true
2、b修改了key,也就是修改了那个地址上的内容,但是地址没变,所以a还是===b。
let a = { value: 1 };
let b = a;
console.log(b === a);
b.value = 2;
console.log(b === a);
结论
===比较的是地址
拓展
1、react hook的memo比较的是preProp和curProp的某个对象getTextLen,这个对象只要地址没变,就不会更新。
2、所以可以用useRef的current把getTextLen保存起来,如此每回虽然更改current的值,但是getTextLen是个引用,每回都指向同一个地址,可以起到缓存作用。
function EditArticle() {
const [title, setTitle] = useState('');
const getTextLen = useRef(() => [0, 0]);
getTextLen.current = () => [title.length, content.length];
return (
<div className="App">
文章标题 <input value={title} onChange={e => setTitle(e.target.value)} />
<MemoArticleTypeSetting getTextLen={getTextLen} /> // 使用子组件
</div>
);
}
//子组件
const ArticleTypeSetting = ({ getTextLen }) => {
console.log(' --- ArticleTypeSetting 组件重新渲染 --- ');
console.log(
'埋点 >>> 切换类型,当前「标题」和「内容」长度:',
getTextLen.current(),
);
};
return (
<div>
文章类型组件,当选择类型时上报「标题」和「内容」长度
</div>
);
};
const MemoArticleTypeSetting = memo(ArticleTypeSetting, (pre, cur) => {
return pre.getTextLen === cur.getTextLen;
});