2016-04-12 11 views
1

Ich versuche, bedingte Rendering in Meter + React zu bekommen. Ich möchte nur eine Komponente zu zeigen, wenn die Anzahl der Elemente aus einer Sammlung === zurückgegeben 0.Bedingtes Rendern in Meteor + React

Ich habe versucht, diese:

renderInputForm() { 
if (Tokens.find().count()) return; 
return (<TokenForm />); 
} 

und setzt {this.renderInputForm()} im Haupt machen(), aber dann blinkt es für einen Bruchteil einer Sekunde, bevor es sich versteckt ...

Ich weiß, warum der Blitz geschieht, aber versuchend, es zu vermeiden ....

Antwort

0

Sie müssen warten, bis die Daten mit der Synchronisierung abgeschlossen sind. Der Flash ist da, weil die MiniMongo-Sammlungen zu Beginn leer sind. (Außerdem sollten Sie Collection.find() in Ihrer Render-Funktion zu vermeiden.)

Unter der Annahme, verwenden Sie Meteor 1.3.x:

export const MyComponent = createContainer(() => { 
    let subscription = Meteor.subscribe('something'); 
    if (!subscription.ready()) return {}; 
    return { 
    tokens: Tokens.find().fetch() 
    } 
}, InternalComponent); 

und dann prüfen, für die Existenz von props.tokens in Ihrer Komponente reagieren.

class InternalComponent extends React.Component { 
    render() { 
    if (!this.props.tokens || this.props.tokens.length > 0) return; 
    return <TokenForm />; 
    } 
} 

mehr über Abonnements erfahren Sie hier: http://docs.meteor.com/#/full/meteor_subscribe

+0

Sind diese beiden Schnipsel in der gleichen Datei? Ich habe derzeit anderen Code in der render() und versuche zu ermitteln, wie diese InternalComponent ordnungsgemäß verwendet wird. –

+0

Sie können in der gleichen Datei sein, ja. 'createContainer' macht was" getMeteorData "in Meteor 1.2, wenn Sie damit vertraut sind. Im Grunde fügt es nur einige Dinge zu InternalComponent hinzu, um es mit React zu verbinden. Sie können immer noch den erforderlichen Code in InternalComponent einfügen. – aedm

Verwandte Themen