【问题标题】:Using require within a react component在反应组件中使用 require
【发布时间】:2021-07-23 14:33:37
【问题描述】:

假设我有以下 ReactJS 组件:

const MyComponent = () => {
  const jsonData = require("./theJsonData.json");

  return <ChildComponent jsonData={jsonData} />
}

注意 React 组件中的 require() 调用。通常,我会使用文件顶部的import 导入 JSON。

有人会向我解释为什么这样做是错误的。我意识到这并不常见,而且我什至从未在野外见过这种方法。但它确实有效。我正在寻找一个清晰的解释,说明为什么这是一种不好的方法。

或者,如果您认为这是一个好方法,我也很想学习。

更新: 这个问题仍然存在,但我想指出我刚刚做的一些研究。我刚刚验证了此文件的所有requires 将在运行时引用同一个对象。每个require() 都将替换为对__webpack_require__('the/path.json') 的调用。该调用始终返回相同的对象。即使您在不同的组件中使用它。

所以我最初对拥有 20 个 JSON 数据副本(20 个对象对应 20 个组件)的担忧已经不复存在。

所以现在我真的不知道问题是什么。这种方法是否存在问题,或者它只是“看起来”错误。

【问题讨论】:

  • 为什么要允许出现性能问题?你已经知道它会发生,你怎么能保证其他开发者不会按预期使用它?
  • 在绝对没有问题的解决方案(开头import)和可能引入性能问题的解决方案(require)之间,您会选择哪个?
  • 我很欣赏这两个“安全起见”的cmets。我发布了这个问题,以便 webpack 或 requireJS 的专家可以指定它导致的确切问题(或者甚至有一个问题)。例如, require 在运行时使用 __webpack_require__('path') 来访问对象(但每次都是新的,还是它们都引用同一个对象),而 import 用对对象的全局引用替换变量赋值以下划线中的名称为前缀。我希望有人能从这个角度解释使用 require() 的缺点。

标签: reactjs create-react-app


【解决方案1】:

我认为 es6 导入比“require”提供的一个重要好处是能够减少 Javascript 负载。

与 require 语句不同,命名导入允许您仅使用您在应用程序中实际使用的依赖项,而 webpack 可以摆脱在生产构建中未显式导入的依赖项。

【讨论】:

  • 听起来您指的是樱桃采摘,但在本例中,我们导入的是 JSON 文件。我们没有使用命名导出。我们正在导入整个 JSON 文件。
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2021-06-03
  • 2018-11-26
相关资源
最近更新 更多