gpt4 book ai didi

javascript - Meteor JS ReactMeteorData - CreateContainer - super 表达式必须为 null 或函数

转载 作者:行者123 更新时间:2023-12-03 04:10:32 25 4
gpt4 key购买 nike

从 1.4 升级到 Meteor 1.5 后,react-meteor-data 中的 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);

下面的应用程序文件,在构造函数中我正在执行 super(props) 但仍然抛出错误

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;

最佳答案

就我个人而言,对于容器数据,我确实喜欢这样(来自 masterchef Base,已更新并正常工作):

/* 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();
};
};
}

希望它会有用。

关于javascript - Meteor JS ReactMeteorData - CreateContainer - super 表达式必须为 null 或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com