反应严格模式如何工作?

玉泽

我可以发现严格模式两次调用某些方法(例如构造函数,渲染,函数调用上的主体),然后看到它们是幂等的,因此不会发生副作用。我很好奇它如何检测意外的副作用。

在文档中,他们谈论并发模式并解释“严格模式”。我得到了它的概念,将“渲染”阶段分为几部分,并多次运行(更准确地说,在渲染之前在后台做一些工作)。

那么严格模式如何?当状态更改时,它们是否只是两次调用某些方法并创建两个虚拟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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章