2016-10-05 2 views
1

У меня очень неприятная проблема и я не могу понять, почему это происходит. У меня есть следующий контейнер:Опоры не передаются в компонент React от Meteor createContainer

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 с контейнером, он содержит некоторые данные. Однако, когда я проверяю someData в реквизитах компонента, он просто показывает someData как пустой массив.

Кто-нибудь знает, что происходит?

+0

Можете ли вы опубликовать свой консольный журнал? – JeremyK

ответ

1

Если вы посмотрите на консоли журнала вы должны увидеть следующее:

  1. лесозаготовок из createContainer, показывая someData является [] - потому что createContainer возвращается до того, как данные были извлечены.
  2. входа из SomeComponent.constructor, показывая те же - это this.props [] (пустой массив)

  3. каротажные из createContainer, показывающий данные в someData, например, [Объект, объект, объект, объект, объект] - ваш клиент теперь имеет данные в miniMongo и повторно передал ваш компонент.

Когда компонент принимает данные от сервера, он повторно выводит - перезапустив createContainer и метод визуализации компоненты - но не конструктор.

Если вы переместите console.log(this.props); со своего конструктора в метод визуализации, вы увидите, что он получил данные, и если вы включите его в вывод, вы увидите его в браузере.

+0

Спасибо за комментарий. Я понял, что мне нужно разместить console.log в функции componentWillReceiveProps. – JoeTidee

Смежные вопросы