当前位置: 首页 > 面试题库 >

如何防止加载多个React副本?

施自怡
2023-03-14
问题内容

在我以前的Meteor应用程序中,使用browserify和React,所有功能都可以使用,直到我切换到meteor
webpack为止

我在Meteor应用程序中使用react-select,效果很好,但是使用browserify可以防止加载多个react副本,从而避免出现此错误:

错误:始终违规:addComponentAsRefTo(...):只有ReactOwner可以具有引用。您可能会向未在组件的render方法中创建的组件添加引用,或者您已加载多个React副本(详细信息:https://fb.me/react-refs-must-have-owner) 。

我的package.json看起来像这样:

...

"dependencies": {
    "classnames": "^2.1.3",
    "lodash": "^3.10.0",
    "react": "^0.14.6",
    "react-dom": "^0.14.6",
    "react-mixin": "^2.0.1",
    "react-select": "^1.0.0-beta8"
  },

...

Webpack中是否有配置,我可以使用外部调用?尚不完全清楚这意味着什么,但要说一条评论:

externals: {
  'react': 'React',
  'react-dom': 'ReactDOM'
}

问题答案:

由于您使用的是webpack,因此可以添加用于加载react的别名,如下所示:

// In webpack.config.js

  resolve: {
    alias: {
      react: path.resolve('node_modules/react'),
    },
  },

这样可以避免addComponentAsRefTo(...)错误,并使我们的构建再次成功。但是,由于某种原因,测试构建只能在我们的CI环境中失败,因为它无法解析node_modules/react路径。我认为您不太可能会遇到此特定问题。



 类似资料:
  • 问题内容: 我有几个使用相同的JNI库的类,称为“ jni”。在每个此类中,我在该类的静态初始值设定项中都有一个System.loadLibrary()调用: 唯一的问题是,我只希望System.loadLibrary()被调用一次,因为这可能需要一段时间。有没有一种简便的方法来防止同一库的多次加载? 问题答案: 如果已经加载了库,则随后的任何加载相同库的调用都将被忽略。 : 加载由libname

  • 问题内容: 有没有办法用javascript / jquery防止图像加载?我正在从带有图像的html列表构建幻灯片。因此,我想收集所有src数据,然后阻止加载图像。因此,稍后当用户真正需要图像时,我便会加载它。 我在Google上找到了一些延迟加载脚本,但找不到阻止图像加载的方式。 提前致谢。 Edit1: 从答案看来,不可能使用javascript来防止图像加载。 这是一个执行延迟加载的脚本。

  • 只读操作: 有没有办法有一个MongoDB副本集,但要使连接到的框上的MongoDB实例成为被查询的MongoDB? 我在AWS负载平衡器后面有三个EC2实例。 在每个EC2实例上运行MongoDB,它是副本集的一部分。 我在nodeJS上有expressendpoint,我连接到副本集,如下所示 我希望在MongoDB副本集的所有三个实例上均匀分布查询负载,而不是默认情况下将所有查询路由到定义了

  • 我在我的应用程序中使用导航栏,每次我选择一个项目时,它都会加载一个片段。 我能够使用相同的文本字段和按钮保存片段的状态,但有一个片段可以加载地图、添加标记、集群并执行。 每次我转到另一个菜单项并返回时,它都会重新加载所有内容,例如AsyncTask、Cluster、Markers。我如何停止此片段以不再重新创建地图并在返回时保存状态: Udate 1:我更新了代码,但问题仍然存在 主要活动: 主片

  • 我从这里修改了以下组件定义,如下所示。但是,与示例不同的是,每次在组件上移动鼠标时,组件都会重新呈现。 重新渲染非常引人注目: 有人知道为什么会这样吗?

  • 当你使用webpack时,有什么方法可以阻止加载所有的语言环境(我只需要英语)?我在看源代码,似乎如果定义了,它是为webpack定义的,那么它总是试图每个区域设置。我很确定这需要一个拉请求来修复。但有什么办法,我们可以修复这个与webpack配置? 这是我加载momentjs的网页配置: 然后,无论我在哪里需要它,我都只需要。这是可行的,但它会将大约250 kB不需要的语言文件添加到我的包中。我