我可以发现严格模式两次调用某些方法(例如构造函数,渲染,函数调用上的主体),然后看到它们是幂等的,因此不会发生副作用。我很好奇它如何检测意外的副作用。
在文档中,他们谈论并发模式并解释“严格模式”。我得到了它的概念,将“渲染”阶段分为几部分,并多次运行(更准确地说,在渲染之前在后台做一些工作)。
那么严格模式如何?当状态更改时,它们是否只是两次调用某些方法并创建两个虚拟DOM进行比较?
除了您可以在文档或流行博客中找到的内容之外,我猜问题还在于“如何StictMode
实现”。
React有一个符号来标记以下用途StrictMode
:
Symbol.for
在MDN上查看
// The Symbol used to tag the ReactElement-like types
export let REACT_STRICT_MODE_TYPE = 0xeacc;
REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
...
export const StrictMode = REACT_STRICT_MODE_TYPE;
然后,当您对其进行调用React.createElement
时,将为子树中的所有节点分配“反应严格模式”。
typeof React.StrictMode; // symbol
<React.StrictMode />
// Transpiled to
React.createElement(React.StrictMode, ...);
现在,当模式打开时,React Fiber将为运行节点执行额外的逻辑:
if (hostFiber.mode & StrictMode) {
// ... extra logic
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句