我正在使用TypeScript开发React应用程序。我有以下简单的post方法:
import React, { useState } from 'react';
import axios from 'axios';
await axios.post('api/account/register', {
FirstName: formData.firstName,
LastName: formData.lastName,
Username: formData.email,
Password: formData.password,
IsLocked: true,
Role: 'Admin',
});
下面是js文件中的相应代码:
const axios_1 = __importDefault(require("axios"));
const react_1 = __importStar(require("react"));
yield axios_1.default.post('api/account/register', {
FirstName: formData.firstName,
LastName: formData.lastName,
Username: formData.email,
Password: formData.password,
IsLocked: true,
Role: 'Admin',
});
它抛出这个异常:axios_1.default.post不是函数错误。我安装了最新版本的Axios。
下面是ts.config
文件:
{
"compileOnSave": true,
"compilerOptions": {
"module": "commonjs",
"jsx": "react",
"skipLibCheck": true,
"strict": true,
"moduleResolution": "node",
"target": "es6",
}
}
dependencies
inside package.json:
"dependencies": {
//other packages
"axios": "1.4.0"
},
在这里你可以找到几乎所有的项目文件:
https://github.com/erkaner/reactapp-peeraid
我已经检查了一些其他的帖子,但无法找到解决这个问题的方法。有什么需要帮忙的吗?
3条答案
按热度按时间jvlzgdj91#
经过广泛的测试和调试,并前往不同的来源,以找出有关的问题,问题实际上是与
create-react-app
。本质上,axios
为浏览器提供了一个commonjs
模块,而create-react-app
的webpack配置似乎没有正确处理它。This问题帮助我确认了这一点。我做了什么?
我进入
Register.js
文件,并为axios__1
添加了一个console.log
,以找出它是-这没有任何意义,我看到扩展名是
.cjs
,也发现,如果我删除所有的.js
文件从项目,它的工作!.为什么?所有文件都是es模块,webpack(来自Register.js
源)似乎将axios
导入为es模块-这里看到
__esModule
被设置为true
,所以它会尝试像这样导入它。现在,正如开始时提到的,这是create-react-app
的错误,因为webpack配置不正确,所以请继续阅读。那么,如何修复呢?
检查
create-react-app
的webpack配置,以确保babel正确转换并导入代码。我们可以使用craco或react-app-rewired。我决定用react-app-rewired
-1.使用
npm i -D react-app-rewired
安装react-app-rewired
。1.在项目的根目录下创建一个文件
config-overrides.js
,然后用下面的代码片段填充它:1.修改
package.json
以使用react-app-rewired
而不是react-scripts
,如下所示-就这样,问题就解决了。
tf7tbtn22#
我认为问题来自于
config
文件,因此您所需要的只是确保启用名为esModuleInterop
的功能此选项有助于导入CommonJS模块,其中包括
axios
等库有关更多信息,请查看文档中的
part
v440hwme3#
我认为问题在于import语句以及如何在TypeScript代码中使用
axios
。axios
库可以通过以下方式导入和使用: