2017-10-24 3 views
0

Bibliothek holen: https://github.com/airbnb/react-datesairbnb/reagieren-Daten eingestellt blockiert Tage nach api

Frage: Ist möglich blockiert Tage nach vom Server holen zu setzen? (warte/rufe isDayBlocked zurück oder initialisiere den Kalender neu)

Problem: Callback 'isDayBlocked' wird aufgerufen, nachdem der Kalender den nächsten Monat anzeigt, wenn die Daten noch nicht fertig sind.

Beispielcode:

import { DayPickerSingleDateController } from 'react-dates'; 

class DayPicker { 

    isDayBlocked(day) { 
    return this.days.has(day); 
    } 

    handleMonthChange() { 
    // async api fetch 
    this.days = getNextMonthBlockedDays(); 
    } 

    render() { 
    <DayPickerSingleDateController 
     {...someProps} 
     isOutsideRange={this.isOutsideRange} 
     onNextMonthClick={this.handleMonthChange} 
    /> 
    } 

} 

Was ich versucht:

  • mount/unmount Kalender je nach Ladestütze (Problem - Animation zum nächsten Monat vor nextMount Rückruf + als Kalender verschwinden sieht schlecht aus)

  • laden, um nextMonth Daten zu speichern, also wenn ich Sicht auf nextMonth ändere ‚IsDayBlocked‘ funktioniert gut und holen Daten für nextmonth (Problem - Doppelklick auf Änderung oder nextmonth langsame Verbindung)

Irgendwelche Ideen bitte?

+0

Wir würden mehr Code benötigen, bevor wir herausfinden, was falsch ist. Zum Beispiel wann wird 'isDayBlocked' aufgerufen? –

+0

Es wird bei der Komponentenmontage und bei der Monatsansichtsänderung aufgerufen. Klicken Sie auf nextMonth -> 'isDayBlocked' genannt (das ist ein Problem, weil ich alte Daten habe) ->' GET_DAYS_START' -> 'GET_DAYS_SUCCESS' -> jetzt Daten OK, aber ich bin nicht in der Lage, blockierte Tage zu überprüfen –

Antwort

0

Wenn Sie Ihre Daten im Status halten, wird das Problem behoben und die Ansicht jedes Mal aktualisiert.

handleMonthChange() { 
    // async api fetch 
    getNextMonthBlockedDays().then((data) => { 
     this.setState({days : data}); 
    }); 
    } 

Sie können auch ein Flag setzen, nicht in der Lage sein, den Monat zu ändern, während ein Anforderungsverarbeitung ist oder Sie können die vorherige Anfrage abzubrechen. (Wenn Ihre Fetch API eine Löschung implementiert).

+0

1) Ich behalte meine Daten in redux, also meine Komponente 'DayPicker' wird aktualisiert, aber es wird nicht auf' DayPickerSingleDateController' propagiert (isDayBlocked wird nicht erneut aufgerufen) 2) Versucht, den nächsten Klick beim nächsten Klick zu blockieren, diese Komponente hat prop 'navNext: element' zu Unterstützung eigener Navigation. Aber dieses Element wird automatisch durch einen Knopf umschlossen, der die Implementierung dieses Monats verändert. –

Verwandte Themen