2017-06-04 45 views
0

升級到從1.4 1.5流星後,createContainer函數從反應-流星數據提供了以下錯誤:流星JS ReactMeteorData - CreateContainer - 超級表達式必須是空值或函數

Uncaught TypeError: Super expression must either be null or a function, not undefined 
    at exports.default (modules.js?hash=fb99b6a…:1144) 
    at ReactMeteorData.jsx:6 
    at ReactMeteorData.jsx:6 
    at createContainer (createContainer.jsx:16) 
    at AppContainer.jsx (AppContainer.jsx:8) 

AppContainer.jsx:

import { Meteor } from 'meteor/meteor'; 

import { Session } from 'meteor/session'; 
import { createContainer } from 'meteor/react-meteor-data'; 

import App from '../layouts/App.jsx'; 

export default AppContainer = createContainer(props => { 
    return { 
    currentUser: Meteor.user(), 
    }; 
}, App); 
下面

應用程序文件,在構造函數中我正在執行超(道具),但是錯誤仍然拋出

App.jsx:

class App extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     menuOpen: false, 
     showConnectionIssue: false, 
     headerTitle: null, 
    }; 
    this.setHeaderTitle = this.setHeaderTitle.bind(this); 
    this.logout = this.logout.bind(this); 
    } 

    logout() { 
    Meteor.logout(); 
    this.context.router.replace(`/home`); 
    } 

    render() { 
    ... omitted render function 
    } 
} 

App.propTypes = { 
    user: React.PropTypes.object,  // current meteor user 
    connected: React.PropTypes.bool, // server connection status 
    loading: React.PropTypes.bool,  // subscription status 
    menuOpen: React.PropTypes.bool, // is side menu open? 
    children: React.PropTypes.element, // matched child route component 
    location: React.PropTypes.object, // current router location 
    params: React.PropTypes.object, // parameters of the current route 
}; 

App.contextTypes = { 
    router: React.PropTypes.object, 
}; 

export default App; 

回答

0

Personnally,對於集裝箱數據我不喜歡這樣(從的主廚基地,更新和工作以及):

/* AppContainer.js */ 

// import react and proptypes ... 
import { Meteor } from 'meteor/meteor'; 
import container from '../../../modules/container'; 

// Some code for app layout and proptypes... 

export default container((props, onData) => { 
    const user= Meteor.user(); // adapted for your case 
    onData(null, { 
    currentUser:user, 
    // and others data ... 
    }); 
}, App); 




/* container.js */ 

import { compose } from 'react-komposer'; 
import getTrackerLoader from './get-tracker-loader'; 

export default function container(composer, Component, options = {}) { 
    return compose(getTrackerLoader(composer), options)(Component); 
} 




/* get-tracker-loader.js */ 

import { Tracker } from 'meteor/tracker'; 

export default function getTrackerLoader(reactiveMapper) { 
    return (props, onData, env) => { 
    let trackerCleanup = null; 

    const handler = Tracker.nonreactive(() => Tracker.autorun(() => { 
     trackerCleanup = reactiveMapper(props, onData, env); 
    })); 

    return() => { 
     if (typeof trackerCleanup === 'function') trackerCleanup(); 
     return handler.stop(); 
    }; 
    }; 
} 

希望它-111有用。

+1

這種方法很有效,謝謝! – user1675638

1

嘗試下面的代碼片段:

export default AppContainer = createContainer((props) => { 
    // do subscriptions if you have any 
    return { 
    currentUser: Meteor.user(), 
    }; 
}, App); 
+0

沒有運氣,同樣的錯誤正在返回。 – user1675638

0

您可能會缺少App組件中的super()。 你能分享一下App組件的代碼嗎?

+0

添加應用程序組件,參見上文 – user1675638

相關問題