Mobx 为什么使用observer()包装时,React组件渲染两次?

Mobx 为什么使用observer()包装时,React组件渲染两次?,mobx,mobx-react,Mobx,Mobx React,简单地用observer()包装React组件似乎会导致它们渲染两次。可能的原因是什么?我正在运行最新版本的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

简单地用
observer()
包装React组件似乎会导致它们渲染两次。可能的原因是什么?我正在运行最新版本的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;
从“React”导入React;
从“mobx-react-lite”导入{observer};
常数项=观察者(()=>{
返回(
{console.log(“呈现项”)}
项目
);
});
导出默认项;
这是在一个相对复杂的应用程序中发生的。我在调试另一个问题时注意到了该行为。然后,我删除了尽可能多的代码,并能够在一个非常简单的情况下重现问题


编辑:参见下面的答案。我可以通过尝试使用codesandbox进行回购来确定问题。

我应该在发布问题之前完成我正在进行的工作,尽管这可能会为其他人省去痛苦和浪费时间。结果表明,出现双重渲染的原因是因为我使用了
React.StrictMode
。有趣的是,使用
React.StrictMode
进行双重渲染似乎只有在使用
observer()包装组件时才会出现
React.StrictMode
在整个应用程序(index.js)中使用,如果删除,则双渲染停止