javascript - 在react项目中用es6封装ajax请求,组件中调用总是报错,求解?
阿神
阿神 2017-04-11 11:58:12
[JavaScript讨论组]

函数代码如下

class networkEngine{
    get(req){
        req.type = 'get' ;
        req.dataType = 'json' ;
        req.cache = 'false' ;
        req.beforeSend = xhr =>{
            xhr.setRequestHeader('siXtRq3jPQlKpfKa15PFN6cS-gzGzoHsz ','u5SyAXObPG19dqtpnt1NOnoe ') ;
        } ;
        $.ajax(req) ;
    }

    tests(){
        console.log("test1")
    }
}

export { networkEngine as default } ;

组件中的代码如下


import networkEngine from './../Server/networkEngine' ;

class Teamholl extends React.Component {

    componentDidMount() {
      networkEngine.tests()
    }

    render(){
        return (
            

...

) ; } } export { Teamholl as default } ;

报错信息如下

Uncaught TypeError: _networkEngine2.default.tests is not a function

我有几点疑问:
1,为什么我的类名是networkEngine报错信息却提示_networkEngine2.default.tests不是函数。
2,正确的调用方式是什么?
3,ajax的get请求,如何传递返回值?

我是前端初学,希望可以讲具体一点,谢谢。

阿神
阿神

闭关修行中......

全部回复(3)
黄舟

1、 babel 编译的代码就是这样的,比如:

原始代码:

import Test from './test';
Test.hehe();

编译之后应该是:

'use strict';
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _test = require('./test');
var _test2 = _interopRequireDefault(_test);
_test2['default'].hehe();

2、 你定义的 tests 方法是类 networkEngine 的实例方法,需要先实例化才能调用

new networkEngine().tests();

如果你不想实例化就调用,那就需要定义成静态方法:

networkEngine.tests = function() {
  console.log('静态方法 tests');
}

提示:类名最好首字母大写,NetworkEngine

3、 ajax 请求是异步的,拿返回值只能通过回调函数了

巴扎黑

你的import/export语法错了,你问的问题,因为代码被编译过,所以模块和函数名变了。

伊谢尔伦

在 ES6 中使用 class 新建一个类时,在 import 中使用的时候要 new 一下:

import networkEngine from './../Server/networkEngine' ;
...
const request  = new networkEngine();
request.tests();  // test1
...
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号