react-measure的代码利用了当前浏览器中存在的新 MutationObservers。MSDN 有这样的说法:
此外,突变观察者旨在在通知您的观察者之前记录多个更改。他们批量更改记录,以避免用事件向您的应用发送垃圾邮件。相比之下,突变事件是同步的,会中断正常的代码执行以通知您的应用程序发生了突变。尽管变异观察者采用了延迟通知模型,但您的应用程序的观察者仍然可以保证在下一次重绘之前接收(并有机会处理)所有变异记录。
react-measure 的 MutationObserver 获取一个 MutationRecords 数组,但示例代码只获取第一个:
<Measure
whitelist={['height']}
shouldMeasure={(mutations) => {
// don't update unless we have mutations available
if(mutations) {
return mutations[0].target
} else {
return false
}
}}
// notice how target gets passed into onMeasure now
onMeasure={(dimensions, mutations, target) => {
this.setState({dimensions})
}}
>
<div>
I can do cool things with my dimensions now :D
</div>
</Measure>
遗憾的是,自述文件没有说明为什么会这样,MDN 或 MSDN 也没有说明。我怎么知道要传递哪个 MutationRecord?