为什么React组件在被Observer()包装后呈现两次?

时间:2019-03-30 19:42:58

标签: 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.log("render item")}
      Item
    </div>
  );
});

export default Item;

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

编辑:请参见下面的答案。通过尝试使用codeandbox进行回购,我能够确定问题所在。

1 个答案:

答案 0 :(得分:1)

在发布问题之前,我应该已经完成​​了codesandbox的工作,尽管这可以节省其他人的痛苦和时间。事实证明,发生双重渲染的原因是因为我正在使用React.StrictMode。有趣的是,React.StrictMode的双重渲染似乎仅在用observer()包装组件时出现。这是codesandboxReact.StrictMode在整个应用程序(index.js)中使用,如果删除,则双重渲染停止。