react中异步加载想提出一共公共的方法,但是一直显示无定义

import React from 'react'

class ContainerCommon extends React.Component {

    constructor() {
        super();
        //localStorage.username='再见';

    }

    start() {
        console.log('终于开始了')
    }

    _initKeyDown() {
        require.ensure([], (require) => {

            var $ = require('jquery')

            $(document).ready(function() {

                start()
                /**
                 * 停止轮播
                 */
                function stop() {
                    clearInterval(interval_id);
                    hasStarted = false;
                }
            })

        },'CarouselScreenShortUp1')

    }

    _init() {

        var interval_id = 0;
        require.ensure([], (require) => {
            //require('../../lib/jquery.flexslider');
            //var $ = require('jquery') + require('../../lib/jquery.flexslider');
            var $ = require('jquery')

            $(document).ready(function() {
                var length = 0,
                    currentIndex = 0,
                    hasStarted = false, //是否已经开始轮播
                    t = 3000; //轮播时间间隔


                start()

                /**
                 * 停止轮播
                 */
                function stop() {
                    clearInterval(interval_id);
                    hasStarted = false;
                }
            })

        },'CarouselScreenJqueryShortUp2')

    }

    componentDidMount() {

        // 初始化图片地址
        console.log('初始化第一')
        this._init()

        console.log('第二初始化')
        this._initKeyDown()
    }

    render() {

        return (
            <div>

            </div>
        )
    }
}



export default ContainerCommon;

图片描述

阅读 2.9k
3 个回答

你这样怎么能调得到?应该是this.start()呀

 _initKeyDown() {
    var that= this;
        require.ensure([], (require) => {
            
            var $ = require('jquery')

            $(document).ready(function() {

                that.start()
                /**
                 * 停止轮播
                 */
                function stop() {
                    clearInterval(interval_id);
                    hasStarted = false;
                }
            })

        },'CarouselScreenShortUp1')

    }

或者start改成静态方法

static start() {
               
 }
let aaa = class ContainerCommon extends React.Component... 

用aaa.start()调用

React.Component是以ES6的形式来创建react的组件的,是React目前极为推荐的创建有状态组件的方式,最终会取代React.createClass形式。

React.createClass与React.Component区别有一条就是函数this自绑定:
React.createClass创建的组件,其每一个成员函数的this都有React自动绑定,任何时候使用,直接使用this.method即可,函数中的this会被正确设置。

你写在类里面的方法,在类里面应该通过this.fn()调用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题