SORU
29 EKİM 2014, ÇARŞAMBA


Nerede ajax isteği Akı uygulama yapılmalıdır?

Flux mimarisi ile react.js bir uygulama yaratıyorum ve sunucudan veri talebi olması gereken yerde anlamaya çalışıyorum. Bunun için herhangi bir örnek var. (TODO uygulaması!)

CEVAP
29 EKİM 2014, ÇARŞAMBA


Zaman uyumsuz yazma işlemi deposunda eylem yaratıcıları ve zaman uyumsuz okuma işlemleri koyarak büyük bir savunucusu değilim. Hedefi tam senkron eylem işleyicileri deposu durumu değiştirme kodu tutmaktır; bu basit akıl ve birim test için basit hale getirir. Önlemek için, birden fazla eşzamanlı istekleri için aynı bitiş noktası (örneğin, çift okuma), edeceğim gerçek isteği işleme ayrı bir modül kullanan vaat önlemek için birden fazla isteği; örneğin:

class MyResourceDAO {
  get(id) {
    if (!this.promises[id]) {
      this.promises[id] = new Promise((resolve, reject) => {
        // ajax handling here...
      });
    } 
    return this.promises[id];
  }
}

Mağaza okur asenkron fonksiyonlar dahil ederken, mağazalar uyumsuz işleyicileri kendilerini güncelleme yok, ama bunun yerine bir eylem ateş ve çok önemli bir uyarı varsadeceyanıt geldiğinde bir eylem ateş. Bu eylem için işleyicileri gerçek durumu değişiklik yapıyor sonunda.

Örneğin, bir bileşen olabilir:

getInitialState() {
  return { data: myStore.getSomeData(this.props.id) };
}

Mağaza bir yöntem, belki de, böyle bir şey uygulamış:

class Store {
  getSomeData(id) {
    if (!this.cache[id]) {
      MyResurceDAO.get(id).then(this.updateFromServer);
      this.cache[id] = LOADING_TOKEN;
      // LOADING_TOKEN is a unique value of some kind
      // that the component can use to know that the
      // value is not yet available.
    }

    return this.cache[id];
  }

  updateFromServer(response) {
    fluxDispatcher.dispatch({
      type: "DATA_FROM_SERVER",
      payload: {id: response.id, data: response}
    });
  }

  // this handles the "DATA_FROM_SERVER" action
  handleDataFromServer(action) {
    this.cache[action.payload.id] = action.payload.data;
    this.emit("change"); // or whatever you do to re-render your app
  }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • We've moved!

    We've moved!

    7 Ocak 2008
  • sWooZie

    sWooZie

    9 ŞUBAT 2006