道具不会从Meteor createContainer

时间:2016-10-05 15:15:21

标签: reactjs meteor

我有一个非常烦人的问题,无法理解为什么会这样。我有以下容器:

export default SomeContainer = createContainer(( params ) => {

    const handle1 = Meteor.subscribe('SomePub');
    const isReady1 = handle1.ready();

    var someData = [];
    if( isReady1 ){
         someData = collections.SomeColl.find({}).fetch();
    }

    console.log(someData);

    return {
        someData: someData
    };

}, SomeComponent);

以下是组件:

export class SomeComponent extends Component {
    constructor(props) {
        super(props);
        console.log(this.props);
    }
};

console.log来自容器的someData内容时,它包含一些数据。但是,当我在组件的props中检查someData时,它只显示someData为空数组。

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

如果您查看控制台日志,您应该看到以下内容:

  1. 从createContainer进行日志记录,显示someData为[] - 因为createContainer在获取数据之前返回。
  2. 从SomeComponent.constructor记录,显示相同 - this.props是[](空数组)

  3. 从createContainer进行日志记录,显示someData中的数据,例如[对象,对象,对象,对象] - 您的客户端现在拥有miniMongo中的数据,并已重新渲染您的组件。

  4. 当你的组件从服务器接收数据时,它会重新呈现 - 重新运行createContainer和组件的render方法 - 但不是构造函数。

    如果将console.log(this.props);从构造函数移动到渲染方法,您将看到它已收到数据,如果将其包含在输出中,您将在浏览器中看到它。