【问题标题】:IoC in React without typescript没有打字稿的 React 中的 IoC
【发布时间】:2017-02-04 12:43:52
【问题描述】:

我对 React 还是很陌生,我基本上会有一个服务(一个单一实例),我可以以某种方式注入并在多个 React 组件中使用它。

到目前为止,我通过谷歌搜索遇到的选项是:

  • 使用 React 的上下文,但不建议这样做,因为它是一个未记录的 API。
  • 在 props 中传递对象,从一个组件到另一个组件,但感觉有点不雅和乏味
  • 使用 IoC 容器,例如 inversifyJS,看起来很棒,只是它依赖于 typescript,我不希望在 typescript 中编写我的 React 应用程序。

现在,Inversify 显然可以在原版 JS 中使用 inversify-vanillajs-helpers,但是当我尝试在 React 中使用它来解析组件(我的 App 组件)时,它一直抛出异常声明

“ReactComponent 中缺少必需的 @injectable 注释”

所以,我试图找出一种方法来获取我的服务实例(在使用它的少数组件之间共享相同的实例),或者通过使用 React 但不使用打字稿使 inversify 工作,或者使用新方法我还没有探索。

有什么想法吗?

【问题讨论】:

  • 你可以制作高阶服务组件,然后用它包装你的 React 组件。

标签: reactjs ioc-container inversifyjs


【解决方案1】:

如果你不喜欢 TypeScript,你可以做一些事情:

首先,您需要inversify.decorate 方法。

其次,这种方法对您来说可能过于冗长。为此,我们创建了一个名为 inversify-vanillajs-helpers 的助手。

第三,React 不能很好地处理构造函数注入,因此我们创建了一个辅助函数来促进惰性属性注入,称为 inversify-inject-decorators

这三个工具应该会引导你达到预期的结果:)

【讨论】:

  • 不幸的是,inversify-inject-decorators 似乎需要 TypeScript。是否有 vanillaJS 版本的包?找不到。或者也许是一种使用装饰来注释属性以进行属性注入的方法?
  • 状态更新:我尝试使用 inversify-vanillajs-helpers 注释我的 React 组件,但由于它仍然无法正常工作,我尝试删除所有注入的依赖项(并将调用调整为 annotate 以反映这一点.) 然后,我尝试解析控制器(没有注入依赖项),但我仍然收到相同的消息:ReactComponent 中缺少所需的@injectable 注释。 (请注意,如果我不调用 annotate,我有类似的消息,但它提到了App,而不是ReactComponent。)
  • 如果我也使用 vanillajs 帮助程序包来注释 ReactComponent,那么我会收到一条新的错误消息:派生类 App 中的构造函数参数的数量必须 >= 比其基类的构造函数参数。
  • 您好,很抱歉回复晚了...您是对的,目前不支持此功能。我建议您关闭这个 SO question,我们将在 GitHub 上处理这个问题,因为它是一个功能请求(不是问题)。您可以在github.com/inversify/InversifyJS/issues/489 关注实施过程
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 2023-01-11
  • 2015-10-23
  • 1970-01-01
  • 2022-10-07
  • 2021-08-29
  • 2022-10-21
  • 2015-10-06
相关资源
最近更新 更多