在 Meteor + Blaze + React 中使用 createContainer() 的正确方法是什么?

what is the proper way to use createContainer() in Meteor + Blaze + React?

我有一个正在运行的组件:

import React, {Component, PropTypes} from 'react';
import {createContainer} from 'meteor/react-meteor-data';

export default class Foo extends Component {
}

export default createContainer(() => {
}, Foo);

import Foo from '/imports/ui/components/Foo';

我正在使用 Blaze 来包装 React 组件,如下所示:

import Foo from '/imports/ui/components/Foo';

Template.registerHelper("Foo", function() {
    return Foo;
);

<div>
    {{> React component=Foo}}
</div>

我意识到我不应该在单个文件中执行多个默认导出,但它确实有效。请注意,这适用于以下版本:Meteor v1.4.1.1、Meteor npm v3.10.6、Meteor node v4.5.0.

我现在有一个测试工具,带有 Meteor v1.4.2.3、Meteor npm v3.10.9 和 Meteor 节点 v4.6.2,但它已停止工作。毫不奇怪,在我的服务器控制台中:

While building for web.browser:
imports/ui/components/Foo.jsx:58: Only one default export allowed per module. (58:0)

所以现在我正在寻找一种方法让它以正确的方式恢复工作。

我尝试过的:

首先,将组件和创建容器保存在同一个文件中,我做了适当的 ES6 导出:

const Foo = class Foo extends Component {

const FooContainer = createContainer(() => {

export {Foo, FooContainer};

...并导入 Foo.

结果:应用程序加载了 Foo,但容器代码从未 运行。

second,我将组件和创建容器放在两个不同的文件中,并恢复为导出默认值:

// Foo.jsx    
export default class Foo extends Component {

// FooContainer.jsx
export default createContainer(() => {

...并使用 Foo:

import Foo from '/imports/ui/components/Foo';

Template.registerHelper("Foo", function() {
    return Foo;
});

<div>
    {{> React component=Foo}}
</div>

结果:应用程序加载了 Foo,但容器代码从未 运行。

third,与上面类似,但我改为尝试将 FooContainer 放在页面上:

import FooContainer from '/imports/ui/components/FooContainer';

Template.registerHelper("Foo", function() {
    return FooContainer;
});

<div>
    {{> React component=Foo}}
</div>

结果:来自 React 的大错误消息,基本上我没有做对。

关于使它起作用的正确方法有什么想法吗?

更新:

尝试 4 和 5

将两者放回同一个 class,像这样:

export class Foo extends Component {

export default createContainer(() => {

...有 2 种不同的导入方式:

import Foo from '/imports/ui/components/Foo';

运行 createContainer() 但没有将我的组件放在页面上。

import {Foo} from '/imports/ui/components/Foo';

相反:没有 运行 createContainer(),但我确实看到了组件。

在 1 个 jsx 文件中运行:

export class Foo extends Component {

export default createContainer(() => {

在helper中,依赖默认导出:

import Foo from '/imports/ui/components/Foo';

实际问题是我错误地导入了要发布的服务器文件,这引起了连锁反应,导致组件无法呈现。呵呵