gpt4 book ai didi

reactjs - 使用 tsyringe 与 TypeScript 进行依赖注入(inject) react

转载 作者:行者123 更新时间:2023-12-05 02:42:31 26 4
gpt4 key购买 nike

我目前在处理我的 React TypeScript 项目时遇到了问题。

我使用 npx create-react-app my-app --template typescript 创建了我的项目。

我最近为依赖注入(inject)添加了 tsyringe,并试图为 apiService 实现它。在按照自述文件(https://github.com/microsoft/tsyringe#injecting-primitive-values-named-injection)添加原始值后,我遇到了障碍。我已经将 experimentalDecoratorsemitDecoratorMetadata 添加到我的 tsconfig.json 文件,但没有成功。

我遇到的错误实际错误是:

./src/ts/utils/NetworkService.ts 9:14
Module parse failed: Unexpected character '@' (9:14)
File was processed with these loaders:
* ./node_modules/@pmmmwh/react-refresh-webpack-plugin/loader/index.js
* ./node_modules/babel-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
|
| let NetworkService = (_dec = singleton(), _dec(_class = (_temp = class NetworkService {
> constructor(@inject('SpecialString')
| value) {
| this.str = void 0;

我相当确定这个问题是由 Babel 引起的,但是我使用 npm create react-app --template typescript 创建了这个问题并且似乎无法访问 Babel 配置。

NetworkService.ts

@singleton()
export default class NetworkService
{

private str: string;
constructor(@inject('SpecialString') value: string) {
this.str = value;
}
}

调用方式

bob() 
{
const inst = container.resolve(NetworkService);
}

在 index.ts 中注册类

container.register('SpecialString', {useValue: 'https://myme.test'});


@registry([
{ token: NetworkService, useClass: NetworkService },
])
class RegisterService{}

最佳答案

React-Scripts 管理许多与项目相关的配置。在许多情况下,这很好,实际上是一个不错的功能。但是,由于 React-Scripts 使用 Babel 作为其开发环境并且不公开配置。

您必须运行 npm run eject 来公开配置。

Please note, this is a one-way operation and can not be undone.Personally, I prefer more control with my configuration.

在此之后,您可以在新创建的 config 文件夹中编辑 webpack.config.js

dev-environment中找到babel-loader相关的部分并添加 'babel-plugin-transform-typescript-metadata'plugins 数组

关于reactjs - 使用 tsyringe 与 TypeScript 进行依赖注入(inject) react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67580091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com