2016-05-29 60 views
0

當我將類導出爲'export default AvatarStore;'時與'導出默認新的AvatarStore();'嘗試在其他類中使用其方法時,出現以下錯誤...是否使用了正確的新語法?React Native「不是函數」

not a function 這裏是代碼:

import { List } from 'immutable'; 
    import EventEmitter from 'events'; 
    import Utils from '../utils/Utils.js' 
    import RestService from '../services/RestService' 
    import RestCallStatus from '../constants/RestCallStatus' 
    import Avatar from '../models/Avatar' 

    const CHANGE_EVENT = 'change'; 
    const TAG = 'AvatarStore'; 


    class AvatarStore extends EventEmitter { 

    constructor() { 
     super(); 
     this._populateRestCallStatus = RestCallStatus.NOT_REQUESTED; 
     this._populated = false; 
     this._dataStore = List(); 
    } 

    populate(){ 
     RestService.getAllAvatars(this.handleSuccess.bind(this), this.handleFailure.bind(this)); 
     this._populateRestCallStatus = RestCallStatus.STARTED 
    } 

    handleSuccess(serviceName, jsonData){ 
     Utils.logMethod(TAG, 'handleSuccess ' + serviceName); 
     if(jsonData.length > 0){ this._dataStore = List().clear(); } 
     jsonData.forEach((entity) => { 
      this._dataStore = this._dataStore.push(new Avatar(entity)) 
     }); 
     this._populated = true; 
     this._populateRestCallStatus = RestCallStatus.SUCCESS; 
     this.emitChange(); 
    } 

    handleFailure(serviceName, error){ 
     Utils.logMethod(TAG, 'handleFailure'); 
     this._populateRestCallStatus = RestCallStatus.FAILED 
     console.error(`Server call ${serviceName} failed with error: ${serviceName}!`) 
    } 

    getItems(){ 
     //Utils.logMethod(TAG, 'getItems'); 
     return this._dataStore; 
    } 

    getItemById(itemId){ 
     return Utils.findArrayElementById(this._dataStore, itemId); 
    } 

    getPopulated(){ 
     return this._populated; 
    } 

    addChangeListener(callback) { 
     this.on(CHANGE_EVENT, callback); 
    } 

    removeChangeListener(callback) { 
     this.removeListener(CHANGE_EVENT, callback); 
    } 

    emitChange() { 
     Utils.logMethod(TAG, 'emitChange'); 
     this.emit(CHANGE_EVENT); 
    } 
} 
export default new AvatarStore(); 

回答

1

export default AvatarStore意味着你要導出類。在export default new AvatarStore()的情況下,您導出類(object)的實例。所以你需要使用你的情況下有意義的一個 - 如果你想擁有更多的AvatarStore實例,請使用第一個,否則你可以使用第二個。

當然,在第一種情況下,您需要在導入它之後在某處創建新實例。

相關問題