Во-первых, componentDidMount
вызывается только один раз при загрузке страницы, сразу после завершения первого вызова render
. Поэтому вам не следует вызывать updateResources
, так как есть вероятность, что коллекции к тому времени не закончили загрузку с сервера. Я бы порекомендовал позвонить по номеру render
, потому что render
будет вызываться один раз до прибытия данных и еще раз после получения данных.
Во-вторых, если вы хотите быть еще более точным с моментом поступления данных, вы можете вернуть еще два свойства в withTracker
, включая функцию ready
, например:
export default withTracker(() => {
let towndatasub = Meteor.subscribe("userTownDataPublisher",Meteor.userId());
let resourcedatasub = Meteor.subscribe("userResourcePublisher",Meteor.userId());
return{
townData : Towns.find({"ownerId":Meteor.userId()}).fetch(),
resourceData : Resources.find({"ownerId":Meteor.userId()}).fetch(),
townsReady : towndatasub.ready(),
resourcesReady : resourcedatasub.ready()
}
})(TownPage);
А затем при рендеринге вы можете вызывать updateResources
только после получения данных,
if(this.props.townsReady && this.props.resourcesReady) {
this.updateResources();
}