为什么 React 组件在用观察者()包装时会渲染两次?

use*_*640 4 mobx mobx-react

简单地用 包裹 React 组件observer()似乎会导致它们渲染两次。可能的原因是什么?我正在运行最新版本的 react 16.8.3、mobx 5.9.4 和 mobx-react-lite 1.2.0

例如:

import React from "react";
import { observer } from "mobx-react-lite";

const Item = observer(() => {
  return (
    <div>
      {console.log("render item")}
      Item
    </div>
  );
});

export default Item;
Run Code Online (Sandbox Code Playgroud)

这发生在相对复杂的应用程序中。我在调试另一个问题时注意到了这种行为。然后我删除了尽可能多的代码,并能够在一个非常简单的情况下重现该问题。

编辑:请参阅下面的答案。我能够通过尝试使用 codeandbox 进行 repo 来确定问题。

use*_*640 8

我应该在发布问题之前完成我正在处理的代码和盒子,尽管这可能会为其他人节省痛苦和浪费时间。事实证明,发生双重渲染的原因是因为我使用React.StrictMode. 有趣的是,双重渲染React.StrictMode似乎只在组件被包裹时发生。observer() Here is the codesandboxReact.StrictMode在整个应用程序 (index.js) 周围使用,如果删除,则双重渲染停止。