2017-09-10 4 views
0

Que dois-je faire pour corriger le code ci-dessous?Jsx concaténation en utilisant la chaîne littérale du modèle dans le filtre et la carte

<p> 
{ads.filter(obj => obj._id === this.state.selectedAd_Id) 
.map(obj =>obj.expiry_date 
&& 
`You have to complete this task in${fromNow(moment(obj.expiry_date))}`)} 
</p> 

Cela fonctionne

<p> 
{ads.filter(obj => obj._id === this.state.selectedAd_Id) 
.map(obj => obj.expiry_date 
&& fromNow(moment(obj.expiry_date)))} 
</p> 

Mais comment puis-je concat You have to complete this task in quand obj.expiry_date n'est pas null?

+0

Quel est le problème avec le premier code est-il jeter une erreur? –

+0

@MayankShukla Objets ne sont pas valides comme un enfant Réagir –

Répondre

0

Vous pouvez retourner un ternaires et utiliser l'interpolation de chaîne littérale de modèle avec ES6.

ads.filter(obj => obj._id === this.state.selectedAd_Id) 
    .map(obj => obj.expiry_date ? `You have to complete this task in ${fromNow(moment(obj.expiry_date))}` : false) 
+0

pourquoi && ne fonctionne pas ici? juste parce que la carte doit retourner vrai ou faux? –

0

obj.expiry_date || '' sera probablement faire le travail

Vous pouvez également utiliser un conditional (ternary) operatorobj.expiry_date ? obj.expiry_date : ''

+0

oh cela a fonctionné, pourquoi dans la carte, je ne peux pas utiliser '&&'? –

+0

'||' est une logique ou, '&&' est une logique et. Consultez la documentation sur [Opérateurs logiques] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR) – Caligone