J'ai un problème dans mon composant React. J'essaie de ne montrer que les données à venir dans le futur ou aujourd'hui uniquement. Mais j'obtiens cette erreur :

.isAfter n'est pas une fonction lorsque j'utilise le format.

Sans le format, cela fonctionne, mais je récupère des données erronées.

En bref : je souhaite afficher uniquement les événements à venir.

Mon code:

showData = () => {
    const { checks } = this.props;

    return (
        this.state.opendagen.length > 0 &&
        this.state.opendagen.map((value, index) => {
            const { opendag_data: datum } = value;
            const date = Moment(datum, 'DD/MM/YYYY').format('DD/M/YYYY');
            const now = Moment().format('DD/M/YYYY');

            console.log('vandaag:', now, 'data:', date);

            const concatData = [
                ...(value.opendag_department + ' - '),
                ...(value.opendag_data + ' - '),
                ...value.opendag_link,
            ];

            return date.isAfter(now) ? (
                <tr key={index}>
                    <td data-th="Datum">{value.opendag_data}</td>
                    <td data-th="Opleiding">
                        <strong>{value.opendag_department}</strong>
                    </td>
                    <td data-th="Link">
                        <a
                            target="_blank"
                            rel="noopener noreferrer"
                            href={value.opendag_link}>
                            bekijk website
                        </a>
                    </td>
                    <td data-th="Select">
                        <CheckBox
                            thisClassName="data__checkbox checkbox__input"
                            value={concatData.join('')}
                            id={'string_' + index}
                            onChange={checks}
                        />
                    </td>
                </tr>
            ) : null;
        })
    );
};
2
user10408806 14 mars 2019 à 15:07

2 réponses

Meilleure réponse

La variable date n'est pas un objet moment, car vous avez utilisé le format ici

const date = Moment(datum, 'DD/MM/YYYY').format('DD/M/YYYY');

La méthode format sur l'objet moment renvoie une chaîne formatée, donc votre variable date n'est qu'une chaîne.

4
Prithwee Das 16 avril 2020 à 13:39

Moment().format() renverra une chaîne. Une chaîne ne répondra pas à isAfter().

Vous devez soit affecter votre date formatée à une autre variable, soit simplement la formater à l'endroit où vous souhaitez l'afficher :

const date = Moment(datum, 'DD/MM/YYYY');
const now = Moment();

return date.isAfter(now) ? ( // <-- this now works 
  ...
0
Jon 14 mars 2019 à 12:11